下面是C语言实现的希尔排序代码:
#include <stdio.h>void shellSort(int arr[], int n) { int gap, i, j, temp; for (gap = n / 2; gap > 0; gap /= 2) { for (i = gap; i < n; i++) { temp = arr[i]; for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) { arr[j] = arr[j - gap]; } arr[j] = temp; } }}int main() { int arr[] = { 12, 34, 54, 2, 3 }; int n = sizeof(arr) / sizeof(arr[0]); int i; printf("Original Array: \n"); for (i = 0; i < n; i++) printf("%d ", arr[i]); shellSort(arr, n); printf("\nSorted Array: \n"); for (i = 0; i < n; i++) printf("%d ", arr[i]); return 0;}
希尔排序的基本思路是将待排序数组分组,对每组分别进行插入排序,然后逐渐缩小分组的间隔,重复进行插入排序,直到分组间隔达到1为止。在插入排序的基础上,希尔排序通过缩小间隔来提高排序效率,减少了交换操作的次数,最坏时间复杂度约为O(n^2),但平均时间复杂度较好,约为O(nlogn)。