插入排序如下
void InsertSort(vector& a) { for (int i = 1; i < a.size(); i++) { int index = i; while (index) { if (a[index - 1] > a[index]) { swap(a[index - 1], a[index]); index--; } else { break; } } } }
希尔排序是在插入排序地基础上实现的,我们知道插入排序在整体基本有序的情况下效率很高
那我们能不能先让待排序的数先整体有序呢?
这就是希尔排序所做到的了。
希尔排序如下
void ShellSort(vector& a) { int gap = a.size(); while (gap > 1) { gap /= 2; // 因为数组为空或是1都不影响 for (int i = gap; i < a.size() - gap + 1; i++) { int index = i; while ((index - gap) >= 0) { if (a[index - gap] > a[index]) { swap(a[index - gap], a[index]); index -= gap; } else break; } } } }



