希尔排序:
希尔排序:从整体宏观上有序逐步细节到局部的有序,希尔排序是一种改进版的插入排序,普通的插入排序算法中,是从第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; } } }