排序算法之插入排序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; } }
测试结构:
排序正确。
相关文章推荐
- 常用的排序算法(快速排序、插入排序、希尔排序、堆排序、冒泡排序、选择排序、归并排序)
- 常见的排序算法示例(2)-选择排序、插入排序、希尔排序
- 排序算法总结-插入排序、希尔排序、堆排序、快速排序
- 基本排序算法(冒泡排序 选择排序 插入排序 快速排序 归并排序 基数排序 希尔排序)
- 各种排序算法汇总(插入排序:直接插入排序、折半插入排序、希尔排序)
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 【Java常用排序算法】插入排序(直接插入排序、希尔排序)
- 排序算法---之插入排序(直接插入排序&希尔排序)
- 排序算法之--从插入排序到希尔排序
- 几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序)——希尔排序
- 排序算法之--从插入排序到希尔排序
- 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序
- 排序算法总结-插入排序、希尔排序、堆排序、快速排序
- C++ ------------排序算法(冒泡排序-快速排序-选择排序-插入排序-希尔排序)
- 排序算法Java——插入排序(希尔排序)
- C#实现所有经典排序算法(选择排序,冒泡排序,快速排序,插入排序,希尔排序)
- 排序算法(一):插入排序(直接插入排序、希尔排序)
- 【Java常用排序算法】插入排序(直接插入排序、希尔排序)