1 #include <iostream> 2 3 using namespace std; 4 5 //希尔排序 6 void shellSort(int iarr[],int length) 7 { 8 int dt[3] = {5,3,1},i =0 ,j,k,temp; 9 for(j = 0; j < 3; ++j) 10 { 11 for(i = dt[j]; i < length; ++i) 12 { 13 temp = iarr[i]; 14 k = i - dt[j]; 15 while(temp < iarr[k] && k >= 0) 16 { 17 iarr[k + dt[j]] = iarr[k]; 18 k -= dt[j]; 19 } 20 iarr[k + dt[j]] = temp; 21 } 22 } 23 } 24 int main() 25 { 26 int a[25]={4,1,3,2,16,9,10,14,8,7,7,10,7,28,30,3,12,0,1,3,9,12,11,4,19}; 27 shellSort(a,25); 28 for(int i=0;i < 25; ++i) 29 cout << a[i] << " "; 30 return 0; 31 }
不需要大量的辅助空间,和归并排序一样容易实现。希尔排序是基于插入排序的一种算法, 在此算法基础之上增加了一个新的特性,提高了效率。希尔排序的时间复杂度与增量序列的选取有关,例如希尔增量时间复杂度为O(n2),而Hibbard增量的希尔排序的时间复杂度为O(
原文:http://www.cnblogs.com/zhuwbox/p/3632261.html