实现希尔排序:控制台输入任意长度整数序列,并将排序好的序列在控制台中输出。C语言实现
时间: 2024-09-19 15:15:37 浏览: 77
希尔排序(Shell Sort)是一种插入排序的改进版本,它通过将待排序数组分为若干子序列,对每个子序列分别进行插入排序,然后逐步缩小子序列范围,最终整个数组就有序了。以下是C语言的一个简单实现:
```c
#include <stdio.h>
// 选择增量序列,这里采用经典的Hibbard增量序列
#define SHELL_SORT_INCREMENT {5, 10, 15, 20, 25}
void shellSort(int arr[], int n) {
for (int gap = SHELL_SORT_INCREMENT[0]; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j;
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, i;
printf("Enter the number of elements: ");
scanf("%d", &n);
int arr[n];
printf("Enter %d numbers: ", n);
for (i = 0; i < n; i++)
scanf("%d", &arr[i]);
shellSort(arr, n);
printf("Sorted array: \n");
printArray(arr, n);
return 0;
}
```
在这个程序中,我们首先从较大的增量开始,逐渐减小到1,每一步都完成一次近乎直接插入排序的过程。运行此程序后,用户可以输入任意长度的整数序列,然后程序会输出已排序的序列。
阅读全文