希尔排序:
希尔排序:从整体宏观上有序逐步细节到局部的有序,希尔排序是一种改进版的插入排序,普通的插入排序算法中,是从第2个节点开始,依次插入到有序序列中,这种做法虽然“一次成形”,但研究发现时间效率上这么做并不划算。
希尔排序的时间复杂度为O(n*logn)
100个/2 = 50组 同组间隔50 每组元素是2个
50/2 = 25 同组间隔25 每组元素是4个
25/2 = 12 同组间隔12 每组元素是8 -----漏了后4个元素
12/2 = 6 同组间隔6 每组16个元素 — 还是漏掉了后4个
6/2 = 3 同组间隔3 每组32个元素 — 还是漏掉了后4个
3/2 = 1 同组间隔1 每组100个 — 最后一个看成特殊情况 直接全元素处理
1/2 = 0
代码:
void Shellsort(int data[], int len)
{
int gru; //组数
int i,j;
//希尔排序的轮次循环
for(gru = len/2;gru!=0;gru/=2)
{
//根据组数找插排的起始的元素
for(i=gru;i<len;i++)
{
//单独一组的插排--可能是交替插排
int temp = data[i];
for(j =i-gru;j>=0;j-=gru)
{
if(data[j] > temp)
data[j+gru] = data[j];
else
break;
}
data[j+gru] = temp;
}
}
}