#include<stdio.h>
#define length 9
/**
采用希尔排序可以通过相隔增量为increment的两个值的一次遍历比较来使得一个数组尽可能的有序
*/
void shellSort(int array[length])
{
int i,j,temp;
int increment=length;
do
{
// 进行增量的初,始化操作 ,每执行一次do操作,增量都会进行一次缩减
increment=increment/3+1;//该increment参数值是人为进行设定的一个计算公式
i=increment;//标量i指向数组当中靠后的值
j=i-increment;//j指向数组当中靠前的值
// 另指针i指向数组当中的后一个数字,j指向数组当中的前一个数字,ij两个变量之间相差的增量为increment
for(;i<length && j>=0;i++,j++)
{
// 比较两个指针所指向的两个数值,若后边的数比前边的数小,则进行交换操作,否则i,j两个指针同时后移指向下一组数据,比较其大小
if(array[i]<array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
// 最后一次进行do执行的时候increment为1
while(increment>1);
}
int main()
{
int array[length]={9,1,5,8,3,7,4,6,2};
int i;
shellSort(array);
printf("进行希尔排序之后的数组:\n");
for(i=0;i<length;i++)
{
printf("%d ",array[i]);
}
}
希尔排序
最新推荐文章于 2023-11-28 16:53:17 发布