插入排序高效改進之希爾排序
阿新 • • 發佈:2019-02-17
希爾排序,也叫遞減增量排序,是插入排序的一種更高效的改進版本,是不穩定的排序演算法。
希爾排序是基於插入排序的以下兩點性質而提出改進方法的:
1、插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率
2、但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位
希爾排序通過將要排序的全部元素分為幾個區域來提升插入排序的效能,讓需要移動的數向要移動的方向一次走一大步。然後取越來越小的步長進行排序,最後進行一次普通的插入排序,此時需排序的數幾乎已經是排好的了,插入排序較快#include <stdio.h>
void printA(int *a,int len)
{
int i;
for(i = 0; i < len; i++)
{
printf("%4d",a[i]);
}
printf("\n");
}
void shell(int *a, int len)
{
int i,j,get;
int d = len;
do
{
d = d/3+1; //每次的步長
for(i = d; i < len; i++)
{
get = a[i];
j = i-d;
while(j >= 0 && a[j] > get)
{
a[j+d] = a[j];
j = j-d;
}
a[j+d] = get;
}
}while(d>1);
}
int main()
{
int a[10] = {7,2,9,4,1,3,8,6,5,0};
int len = sizeof(a)/sizeof(a[0]);
shell(a,len);
printA(a,len);
return 0;
}