希尔排序

希尔排序也属于插入排序的一种,但在时间效率上有较大改进。它的基本思想是:先设置一个增量,每次从左将相隔增量的位置的值有序,就是使用的插入法排序,然后将增量一步一步缩小,最后一步必须缩小到1。增量为n/2    n/4   n/8 ......1时的效率较高。

希尔排序_第1张图片


//shell 排序算法
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
#define N 10005
int shell[N];
void shellsort(int *a, int len)
{
    for(int gap=len/2; gap>0; gap--)	//确定增量
    {
        for(int j=gap; j<len; j++)	//从增量开始一直往后遍历
        {
            for(int k=j-gap; k>=0 && a[k]>a[k+gap]; k+=gap)  //每次遍历间隔为gap,每次插入一个数,当比前面的数小,就交换
            {
                swap(a[k], a[k+gap])
            }
        }
    }
}
int main()
{
    int shell[] = {1,5,6,7,3,3,6,7,15,34,12,3,234,34}; //测试样例
    shellsort(shell, 14);
    for(int i=0; i<14; i++)
        cout<<shell[i]<<" ";
    cout<<endl;
    return 0;
}


你可能感兴趣的:(Algorithm,sort,DataStructure)