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、《大话数据结构》