C++ 希尔排序

ShellSort.h文件

#ifndef SHELLSORT_H
#define SHELLSORT_H
#include <vector>
#include <iostream>
using std::vector;
using std::cout;
using std::endl;

template <typename T>
class ShellSort
{
private:
    unsigned int len;
    vector<T> list;

public:
    /*
     *Construction function
    */
    ShellSort(vector<T> _list, unsigned int _len)
    {
        for(unsigned int i=0;i<_len;i++)
            list.push_back(_list[i]);
        this->len = _len;
    }

    /*
     * Shellsort function
     */

    void shellSort()
    {
        int insertNum;
        unsigned int gap = len/2; // initial increment
        while(gap) //while gap>=1
        {
            for(unsigned int i=gap;i<len;++i) //Insertsort within subsequence
            {
                insertNum = list[i];  //Target number to be inserted into subsequence
                unsigned int j=i;
                while(j>=gap && insertNum < list[j-gap])
                {
                    list[j] = list[j-gap];
                    j-= gap;
                }

                list[j] = insertNum;
            } //end for

            gap /= 2;
        } //end while(gap)
    } //end shellSort;

    void out()
    {
        for (unsigned int i = 0;i<len;++i)
        {
            cout<<list[i]<<" ";

        }
        cout<<endl;
    }
};
#endif

test.cpp

#include <vector>
#include "ShellSort"
using namespace std;

const unsigned int numEle = 8;
int data[numEle] = {1,5,7,8,3,2,4,6};

int main()
{
    vector<int> testData;
    for(unsigned int i=0;i<numEle;++i)
        testData.push_back(data[i]);

    ShellSort<int> test(testData, numEle);

    test.shellSort();
    test.out();

    return 0;
}

参考文献:
1、http://blog.csdn.net/xinpo66/article/details/42674815
2、《大话数据结构》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值