AcWing 5333. 插入排序
原题链接
简单
作者:
忧幽
,
2024-10-06 00:37:12
,
所有人可见
,
阅读 1
希尔排序
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
shellSort(a,n);
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
}
int shellSort(int a[],int n){
for(int d=n/2;d>=1;d=d/2){//步长递减方式不断除2
for(int i=d;i<n;i++){
//从每组第二个开始,
_ //执行到i等于2d时候说明每组排好第二个,执行到i等于3d时,
//说明每组排好第三个。i执行到n代表所有组内均有序 _
int temp =a[i];
int j =i-d;
for(;j>=0&&a[j]>temp;j-=d){//有效索引内,a[J]比temp大,就组内后移,直到a[j]比temp小
a[j+d]=a[j];
}
a[j+d]=temp;//a[j]比temp小说明,temp要放a[j]组内后一个上(既a[j+d])
}
}
}