diff --git a/希尔排序 b/希尔排序 index 1c38eef..879f36a 100644 --- a/希尔排序 +++ b/希尔排序 @@ -28,3 +28,21 @@ int main(void) return 0; } + +void shellSort(int *a, int len) +{ + int i, j, k, tmp, gap; // gap 为步长 + for (gap = len / 2; gap > 0; gap /= 2) { // 步长初始化为数组长度的一半,每次遍历后步长减半, + for (i = 0; i < gap; ++i) { // 变量 i 为每次分组的第一个元素下标 + for (j = i + gap; j < len; j += gap) { //对步长为gap的元素进行直插排序,当gap为1时,就是直插排序 + tmp = a[j]; // 备份a[j]的值 + k = j - gap; // j初始化为i的前一个元素(与i相差gap长度) + while (k >= 0 && a[k] > tmp) { + a[k + gap] = a[k]; // 将在a[i]前且比tmp的值大的元素向后移动一位 + k -= gap; + } + a[k + gap] = tmp; + } + } + } +} \ No newline at end of file