#include<cstdio>
void ShellSort(int a[], int n)
{
int d, j, x, i;
d = n/2;
while(d>=1) //循环至增量为1时结束
{
for(i = d; i < n; i++)
{
x = a[i]; //获取序列中的下一个数据
j = i-d; //序列中前一个数据的序号
while(j >= 0 && a[j]> x) //下一个数大于前一个数
{
a[j+d] = a[j]; //将后一个数向前移动
j = j - d; //修改序号,继续向前比较
}
a[j+d] = x; //保存数据
}
d/=2; //缩小增量
}
}
void printNum(int arr[], int n)
{
for(int i = 0; i <= n; i++)
{
printf("%3d", arr[i]);
}
}
int main(){
int arr[] = {10, 5, 6, 29, 30, 18, 39, 40, 3, 4, 8, 2};
ShellSort(arr, 12);
printNum(arr, 11);
return 0;
}
希尔排序
最新推荐文章于 2024-06-04 00:42:18 发布