希尔排序是一种基于插入排序的算法,通过比较相距一定间隔的元素来工作,从而减少元素交换的次数。
下面是一个用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[] = {4, 12, 38, 34, 54, 18, 2, 3};
int n = sizeof(arr)/sizeof(arr[0]);
shellSort(arr, n);
printf("Sorted array: \n");
for (int i=0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
这个程序首先定义了一个名为shellSort的函数,该函数接受一个整数数组和它的大小作为参数。这个函数通过使用不同的间隔序列来对数组进行多次插入排序。然后,主函数创建一个整数数组,调用shellSort函数对其进行排序,并打印排序后的数组。