1、基本原理。
正是没怎么搞懂希尔排序,才将希尔排序放置八大排序算法的最后一个算法来讲。闲话少说,算法的基本原理如下。
2、实现。
/**
* @brief shellSpecIncreSort 对指定范围内的数进行增量为increment的排序
* @param array
* @param length
* @param increment
*/
void shellSpecIncreSort(int* array,int length,int increment)
{
for(int i=increment;i<length;i++)
{
int j=i;
while(j-increment>=0&&array[j]<array[j-increment])
{
std::swap(array[j],array[j-increment]);
j-=increment;
}
}
}
void shellSort(int* array,int length)
{
//增量从length/2到1
for(int incre=length/2;incre>0;incre/=2)
{
shellSpecIncreSort(array,10,incre);
}
}
//测试函数
int main()
{
int a[10]={11,42,53,25,36,6,75,8,26,345};
std::cout<<"before sort:"<<std::endl;
for(int i=0;i<10;++i)
std::cout<<a[i]<<"\t";
std::cout<<std::endl;
shellSort(a,10);
std::cout<<"after sort:"<<std::endl;
for(int i=0;i<10;++i)
std::cout<<a[i]<<"\t";
std::cout<<std::endl;
return 0;
}
3、运行结果。
参考:
[1].https://www.cnblogs.com/chengxiao/p/6104371.html