希爾排序

1.算法的基本思想
希爾排序的基本思想就是將一個無序序列,分割成若干個子序列,分別進行插入排序
首先設置一個增量d1,將相鄰d1的元素構成一個子序列,在排序過程當中不斷減少這個增量,直到這個增量爲1;
 
具體算法:參見普通插入排序,不過加入了一個增量,就是用排序次數的代價來換取排序效率;
 
#include <iostream>
using namespace std;

void shellSort( int arr[], int n)
{
         int i, j;
         int key;
         int h;

         for (h = 1; h <= (n-1)/9; h = 3*h + 1) //得出增量序列 最後增量必定要爲」1「
                
                
         for (; h > 0; h /= 3)
        {
                 if (h==1)      //輸出一下俺增量爲」4「的時候,排序的結果
                {
                         for( int i=0;i<n;i++)
                        cout<<arr[i]<< "    ";            
                }
                 for (i = h; i < n; i++) //這個循環在這裏要走兩遍
                {                     //當h=4時排序的是相隔三個記錄的兩個值
                        key = arr[i];      //當h=1時和普通排序是同樣的,                                       //不過已是一個部分有序的序列了!
                        j = i;
                         while ((j >= h) && (arr[j-h] > key))     //j>=h是要防止數組越界!
                        {
                                arr[j] = arr[j-h];
                                j -= h;
                        }
                        arr[j] = key;
                }
        }
}


int main()
{
         int arr[16] = {9,10, 21, 2, 1, 3, 45, 2, 932, 32, 27, 86, 65, 576, 434, 76753};

         int i;

        cout << "Original array" << endl;
         for (i = 0; i < 15; i++)
                cout << arr[i] << " ";
        cout << endl << endl;


        shellSort(arr, 15);

        cout << "Sorted array" << endl;
         for (i = 0; i < 15; i++)
                cout << arr[i] << " ";
        cout << endl;

         return 0;
}
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息