一.直接插入排序
void Insertsort(int *a,int n){
int i,j;
for( i=1;i<n;i++){
if(a[i]<a[i-1]){
int temp=a[i];//哨兵
for( j=i-1;temp<a[j];j--){
a[j+1]=a[j];//记录后移
}
a[j+1]=temp;//插入到正确位置
}
}
}
二.希尔排序
void Shellsort(int *a,int n){
for(int dlta=n/2;dlta>0;dlta/=2){
ShellInser(a, dlta, n);
}
}
void ShellInser(int *a,int dk,int n){
int i=0,j,temp;
for(i=dk;i<n;i++){
temp=a[i];
for(j=i-dk;j>=0&&temp<a[j];j=j-dk){
a[j+dk]=a[j];
}
a[j+dk]=temp;
}
}
三.冒泡排序
void Bubblesort(int *a,int n){
int i,j,exchang=1;//exchang作为是否有交换的标记,发生交换ex置1,否则为0
for(i=0;i<n&&exchang==1;i++){//若上一趟循环中未发生交换,则已完成排序
exchang=0;
for(j=n;j>i;j--){
if(a[j]<a[j-1]){//发生逆序
exchang=1;//发生交换ex置为1,否则ex保持0
int t=a[j];a[j]=a[j-1];a[j-1]=t;
//swap(&a[j],&a[j-1]);
}
}
}
}
四.快速排序