插入排序算法-----希尔排序:
希尔排序思想是将数组每次分成不同的数组同时进行排序,划分的方式是设置增量值,即h= length/2, h /=2;与直接排序最大的不同就是比较的数组值下标间隔不同。希尔排序在数据量庞大的时候进行排序效率高,时间短。
观察下图,根据以上思想,进行移动。
代码如下:
#include <stdio.h>
void shellsort(int *a, int length)
{
int i,j,temp,h;//h表示增量 h = length/2
for(h = length/2; h>0; h/=2)//计算每次排序的数组下标增量值
{
for(i=h; i<length; i += h) //i从h开始
{
temp = a[i];
for(j = i-h; j>=0; j-=h) //与直接排序不同的是下标间隔为增量值h ,取i的值,将其与前面所有的数进行比较
{
if(temp < a[j])
{
a[j+h] = a[j];
}
else{
break;
}
}
a[j+h] = temp; //数组下标间隔每加一个增量值h
}
}
}
int main()
{
int arry[]={8,2,6,7,0,1,3,12,30,25,90,88,11,13};
int length = sizeof(arry)/sizeof(int);
printf("排序前: ");
for(int i=0; i<length; i++)
{
printf("%d ", arry[i]);
}
shellsort(arry, length);
printf("\n排序后: ");
for(int i=0; i<length; i++)
{
printf("%d ", arry[i]);
}
return 0;
}
程序运行如下: