希尔排序

工作原理

排序对不相邻的记录进行比较和移动:

  1. 将待排序序列分为若干子序列(每个子序列的元素在原始数组中间距相同);
  2. 对这些子序列进行插入排序;
  3. 减小每个子序列中元素之间的间距,重复上述过程直至间距减少为 1。

性质

稳定性

希尔排序是一种不稳定的排序算法。

时间复杂度

希尔排序的最优时间复杂度为 

希尔排序的平均时间复杂度和最坏时间复杂度与间距序列的选取(就是间距如何减小到 1)有关,比如「间距每次除以 3」的希尔排序的时间复杂度是 。已知最好的最坏时间复杂度为 

空间复杂度

希尔排序的空间复杂度为 

实现

C++

// C++ Version

template <typename T>

void shell_sort(T array[], int length){

int h = 1;

while (h < length / 3) {

h = 3 * h + 1;

}

while (h >= 1) {

for (int i = h; i < length; i++) {

for (int j = i; j >= h && array[j] < array[j - h]; j -= h) {

std::swap(array[j], array[j - h]); }

}h = h / 3; } }

posted @ 2022-03-14 13:20  一个小弱鸡  阅读(64)  评论(0)    收藏  举报