C语言实现希尔排序的代码示例,以及每一步的文字讲解。
cs
#include <stdio.h>
// 希尔排序的函数
void shellSort(int arr[], int n) {
// 初始化间隔为n/2
for (int gap = n / 2; gap > 0; gap /= 2) {
// 开始进行插入排序
for (int i = gap; i < n; i += 1) {
int temp = arr[i];
int j;
// 将arr[i]插入到已排序的序列中
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
arr[j] = arr[j - gap];
}
arr[j] = temp;
}
}
}
// 打印数组的函数
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int n;
printf("请输入数组的长度:");
scanf("%d", &n);
int arr[n];
printf("请输入数组元素(用空格分隔):");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("原始数组:");
printArray(arr, n);
// 调用希尔排序函数
shellSort(arr, n);
printf("排序后的数组:");
printArray(arr, n);
return 0;
}
文字讲解:
-
首先,我们定义了一个shellSort函数,用于实现希尔排序算法。
-
在shellSort函数中,我们首先定义了一个间隔gap,初始值为数组长度的一半。
-
使用一个外层循环,不断地减小间隔gap,直到gap为1。
-
在内层循环中,我们使用插入排序的思想,将数组元素按照间隔gap进行分组,然后对每组进行插入排序。
-
在插入排序的过程中,我们将当前元素与已排序序列中的元素进行比较,如果当前元素较小,则将已排序序列中的元素向后移动,直到找到合适的位置插入当前元素。
-
printArray函数用于打印数组元素。
-
在main函数中,我们首先提示用户输入数组的长度和元素,然后调用printArray函数打印原始数组。
-
接着,调用shellSort函数对数组进行排序。
-
最后,再次调用printArray函数打印排序后的数组。
运行程序后,用户可以根据提示输入数组长度和元素,程序会输出排序前的数组和排序后的数组。