希尔排序

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;
}
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息