基本思想:(缩小增量排序)
先将整个待排记录序列分割成若干个子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。
#include<stdio.h>//时间复杂度:最好O(n),最坏(n^2),平均O(^1.3),空间复杂度O(1),不稳定排序。
void Sort(int arr[],int n){
int temp;
for(int gap=n/2;gap>0;gap/=2){
for(int i=gap;i<n;++i){
temp=arr[i];
int j;
for(j=i;j>=gap&&arr[j-gap]>temp;j-=gap){
arr[j]=arr[j-gap];
}
arr[j]=temp;
}
int i;
for(i=0;i<n;i++){
printf("%d ",arr[i]);
}
printf("\n");
}
}
int main(){
int a[]={8,7,6,5,4,3,2,1};
int i;
Sort(a,8);
printf("%d",a[0]);
for(i=0;i<8;i++){
printf("%d ",a[i]);
}
return 0;
}