(待续)
#include <cstdio>
#include <utility>
using namespace std;
const int N = 1e5 + 10;
int n,a[N];
void select_sort_1(int a[],int l,int r) {
for(int i=l;i<=r;i++)
for(int j=i;j<=r;j++)
if(a[i]>a[j]) swap(a[i],a[j]);
}
void select_sort_2(int a[],int l,int r) {
for(int i=l;i<=r;i++) {
int min=0x3f3f3f3f,minx=-1;
for(int j=i;j<=r;j++) {
if(a[j]<min) min=a[j],minx=j;
}
if(minx!=i) swap(a[i],a[minx]);
}
}
// TODO j在i的前面
void bubble_sort(int a[],int l,int r) {
for(int i=r;i>=l;i--) {
for(int j=l;j<i;j++) {
if(a[i]<a[j]) swap(a[i],a[j]);
}
}
}
void insert_sort(int a[],int l,int r) {
if(l==r) return;
for(int i=l+1;i<=r;i++) {
int key=a[i];
int j=i-1;
while(j>=l&&a[j]>key) {a[j+1]=a[j];--j;}
a[j+1] =key;
}
}
const int N = 100010;
const int W = 100010;
int w,cnt[W],b[N];
void fill(int a[],int k,int l,int r) {
if(l<r) return;
for(int i=l;i<=r;i++)
a[i]=k;
}
void counting_sort(int a[],int l,int r) {
memset(cnt,0,N*sizeof cnt[0]);
for(int i=l;i<=r;i++) ++cnt[a[i]];
for(int i=1;i<w;++i) cnt[i] +=cnt[i-1];
for(int i=n;i>=1;i-=cnt[a[i]]) {
fill(b,a[i],i-cnt[a[i]]+1,i);
}
}
int main() {
scanf("%d",&n);
for(int i = 0;i<n;i++) scanf("%d",a+i);
insert_sort(a,0,n-1);
for(int i =0;i<n;i++) printf("%d ",a[i]);
}
您不觉得注释一下函数会更好吗
打算明天写
Orz