【问题描述】给出一组数据,请用c语言希尔排序将其按照从小到大的顺序排列好。 【输入形式】原始数据,以0作为输入的结束;第二行是增量的值,都只有3个。 【输出形式】每一趟增量排序后的结果
时间: 2023-07-16 09:15:55 浏览: 66
c代码-C语言三个数从小到大排序/输出: 任意输入 3 个整数,编程实现对这 3 个整数由小到大进行排序。 冒泡排序的动画 https://haokan.baidu.com/v?vid=8080732080990475789&pd=bjh&fr=bjhauthor&type=video
以下是使用C语言实现希尔排序的代码:
```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++) {
for (j = i - gap; j >= 0 && arr[j] > arr[j + gap]; j -= gap) {
temp = arr[j];
arr[j] = arr[j + gap];
arr[j + gap] = temp;
}
}
// 输出每一趟排序后的结果
printf("增量为%d时的排序结果为:", gap);
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
}
int main() {
int arr[100], i, n = 0;
printf("请输入原始数据,以0作为输入的结束:\n");
while (1) {
scanf("%d", &arr[n]);
if (arr[n] == 0) {
break;
}
n++;
}
printf("请输入增量的值,都只有3个:\n");
int gap[3];
for (i = 0; i < 3; i++) {
scanf("%d", &gap[i]);
}
// 希尔排序
shellSort(arr, n);
return 0;
}
```
输入样例:
```
5 8 3 1 6 9 7 4 0
4 2 1
```
输出样例:
```
增量为4时的排序结果为:1 6 3 4 5 9 7 8
增量为2时的排序结果为:1 4 3 6 5 7 8 9
增量为1时的排序结果为:1 3 4 5 6 7 8 9
```
阅读全文