希尔(Shell)排序的C++实现代码

来源:互联网 发布:陈文光 清华大学 知乎 编辑:程序博客网 时间:2024/05/20 13:36
#include <iostream>

using namespace std;

void ShellSort(int data[],int n)
{

    int i;

//这里的初始增量是n/2,以后增量每次缩小一倍,其实增量的传入可以放入一个增量数组,依次存放每次增量

    for(i=n/2;i>0;i=i/2)
    {

        int j;

//从每个子序列的第二个数据开始进行直接插入排序,i处为每个子序列的第二个数据

        for(j = i;j<n; j++)
        {
            int tmp = data[j];

            int k;

//子序列从倒数第二个元素开始,如果当前元素存在并且倒数第一个元素小于当前元素,则将当前元素后移

            for(k = j-i;k>=0 && tmp<data[k]; k=k-i)
            {
                data[k+i] = data[k];

            }

//k+i即为倒数第一个元素的位置

            data[k+i] = tmp;
        }
    }
}

int main()
{
    int num[10]={2,5,1,3,8,7,4,9,6,0};
    ShellSort(num,10);
    for(int i=0;i<10;i++)
       cout<<num[i]<<" ";
    cout<<endl;
    return 1;
}