.希尔排序
步骤:
1.先选定一个小于N的整数gap作为第一增量,然后将所有距离为gap的元素分在同一组,并对每一组的元素进行直接插入排序。然后再取一个比第一增量小的整数作为第二增量,重复上述操作…
2.当增量的大小减到1时,就相当于整个序列被分到一组,进行一次直接插入排序,排序完成。
动图如下:
class Solution {
void ShellSort(vector<int>& arr) {
int size = arr.size();
int gap = size;
while (gap > 1) {
gap /= 2;
for (int i = 0; i < size - gap; i++) {
int end = i;
int tmp = arr[end + gap];
while (end >= 0) {
if (tmp < arr[end]) {
arr[end + gap] = arr[end];
end -= gap;
}
else {
break;
}
arr[end + gap] = tmp;
}
}
}
}
};
时间复杂度平均:O(N^1.3)
空间复杂度:O(1)