/*
*希尔排序:
* 选取一个小于n的整数d作为第一个增量,把序列分为d组,即所有相互之间距离为d整数倍的
* 元素为同一组,在各组内进行直接插入排序;取第二个增量d2(d2<d),重复上面分组与排序的
* 过程,直到di=1时,即所有元素放在同一组中进行直接插入排序。
*/
#include <stdio.h>
void shell_sort(int *arr,int n)
{
int i,j,d;
int temp;
d=n/2; //设置增量初值
while(d>0)
{
for(i=d;i<n;i++)//对所有相隔为d的元素进行直接插入排序
{
temp=arr[i];
j=i-d;
while(j>=0 && temp>arr[j])//对每组中的数据进行排序
{
arr[j+d]=arr[j];
j=j-d;
}
arr[j+d]=temp;
}
d=d/2;
}
}
int main(int argc,char **args)
{
int arr[]={10,9,88,23,45,9};
int i=0;
shell_sort(arr,6);
for(i=0;i<6;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
希尔排序
最新推荐文章于 2021-07-24 23:27:25 发布