您的位置:首页 > 其它

排序算法之插入排序3——希尔排序

2018-03-26 18:56 369 查看
希尔排序又被称为减小增量的插入排序法,其时间复杂度在O(N^1.25)到O(1.6N^1.25)之间,空间复杂度为O(1),是一种比较高效的排序算法,希尔排序是一种不稳定的算法。关于希尔排序的介绍在任何一本数据结构书里面都有阐述,这里仅给出希尔排序算法的实现:

#pragma once

#include "compare.hpp"

template <typename T>
void ShellSort(T *array, int size)
{
assert(NULL != array && size > 0);
if(size == 1)
return;
int gap = size/3 + 1;
while(gap)
{
for(int i = 0; i < gap; i++)
{
for(int j = i+gap; j < size; j++)
{
for(int k = j; k >= gap; k--)
if(Less<T>()(array[k], array[k-1]))
swap(array[k], array[k-1]);
}
}

if(gap == 1)
break;
gap = gap/3 + 1;
}
}


测试代码:

void test3()
{
int arr[100] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
srand((unsigned int)time(0));
for(int i = 0; i < sz; i++)    //Assign values with random numbers
{
arr[i] = rand() % sz;
}
for(int i = 0; i < sz; i++)    //print array
cout << arr[i] << " ";
cout << endl << endl << endl << "sort:" << endl;
BinaryInsert(arr, sz);
for(int i = 0; i < sz; i++)    //print array
cout << arr[i] << " ";
cout << endl;
for(int i = 1; i < sz; i++)  //check that the sort is correct
{
if(Less<int>()(arr[i], arr[i-1]))
cout << "insert sort error! " << i << endl;
}
}


测试结构:



排序正确。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐