// 希尔排序1void ShellSort1(int data[], int count){ int step = 0; int auxiliary = 0; for (step = count / 2; step > 0; step /= 2) { for (int i = 0; i < step; ++i) { for (int j = i + step; j < count; j += step) { // 直接插入排序 if (data[j] < data[j - step]) { auxiliary = data[j]; int k = j - step; while (k >= 0 && data[k] > auxiliary) { data[k + step] = data[k]; k -= step; } data[k + step] = auxiliary; } } } }}// 希尔排序2void ShellSort2(int data[], int count){ int step = 0; int auxiliary = 0; for (step = count / 2; step > 0; step /= 2) { // 从数组第step个元素开始 for (int i = step; i < count; i++) { // 每个元素与自己组内的数据进行直接插入排序 if (data[i] < data[i - step]) { auxiliary = data[i]; int j = i - step; while (j >= 0 && data[j] > auxiliary) { data[j + step] = data[j]; j -= step; } data[j + step] = auxiliary; } } }}