一.直接插入排序
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,否则为0for(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保持0int t=a[j];a[j]=a[j-1];a[j-1]=t;//swap(&a[j],&a[j-1]);}}}
}
四.快速排序