程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 希爾排序,希爾排序算法

希爾排序,希爾排序算法

編輯:C++入門知識

希爾排序,希爾排序算法


希爾排序:

一句話描述: 將數列分組。每組表示為 [ i,i+d,i+2d,i+3d,...i+kd ] 。每組都用插入排序。最後對整個數組進行一次插入排序。

增量序列希爾提出為:d1=n/2 , d2=d1/2 ...,最後一個增量等於 1

復雜度難以計算 

C++實現:

 1 //希爾排序
 2 //不穩定算法
 3 //時間復雜度:平均n^1.3  最壞:n^2
 4 //一句話描述: 將數列分組。每組表示為[i,i+d,i+2d,i+3d,...i+kd]。每組都用插入排序。最後對整個數組進行一次插入排序。
 5 //增量序列希爾提出為:d1=n/2 , d2=d1/2 ...,最後一個增量等於 1
 6 
 7 void ShellSort(int (&A)[10]){
 8     int d;
 9     for(d=10/2;d>1;d=d/2){
10         changeD(A,d);
11     }
12     InsertionSort(A);  //直接插入排序
13 }
14 
15 
16 void changeD(int (&A)[10],int d){
17     for(int j=0;j<d;j++){
18         for(int k=j+d;k<10;k=k+d){  //k為未整理數組 
19             int tmp=A[j+d];
20             for(int i=j;i>=0;i=i-d){  //i為 整理好的數組的最後一個
21                 if(tmp<A[i])
22                     Swap(A[i+d],A[i]);
23 
24             }
25         }
26     }
27 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved