思想(见图):
等同于插入排序,不同的是,插入排序每次只间隔一个元素,而希尔排序间隔 gap个元素,最后一趟又是一边真正的插入排序(间隔一个):
代码:
#pragma once void ShellSort(int *a, int size) { assert(a); int gap = size; while (gap > 1) { gap = gap / 3 + 1; //一下都是插入排序的过程 int index = gap; int i = gap; while (index < size) { int tmp = a[index]; int end = index - gap; while (end >= 0 && tmp < a[end]) { a[end + gap] = a[end]; end -= gap; } a[end + gap] = tmp; index += gap; } } }