c语言利用希尔排序思想实现一系列1000以内的正整数的排序。 【输入形式】第1行为增量序列的个数;第2行为每个增量;第3行开始输入若干1000以内的正整数,-1结束输入。 【输出形式】先输出排序前的原始数据,再输出每趟希尔排序后的数据;最后输出排好序的结果。 【样例输入】 3 5 3 1 49 38 65 97 76 13 27 48 55 4 -1 【样例输出】 the resource datas is: 49 38 65 97 76 13 27
时间: 2024-02-20 16:57:30 浏览: 72
以下是利用希尔排序思想实现一系列1000以内的正整数的排序的C语言代码。假设输入的若干1000以内的正整数保存在数组a中。
```
#include <stdio.h>
// 希尔排序
void shellSort(int a[], int n, int delta) {
int i, j, temp;
for (i = delta; i < n; i++) {
temp = a[i];
for (j = i - delta; j >= 0 && a[j] > temp; j -= delta) {
a[j + delta] = a[j];
}
a[j + delta] = temp;
}
}
int main() {
int n, i, j, k, delta;
int a[1000];
// 输入增量序列的个数
scanf("%d", &n);
// 输入每个增量
int d[n];
for (i = 0; i < n; i++) {
scanf("%d", &d[i]);
}
// 输入若干1000以内的正整数
i = 0;
while (1) {
int x;
scanf("%d", &x);
if (x == -1) {
break;
}
a[i++] = x;
}
int len = i;
// 输出原始数据
printf("the resource datas is:\n");
for (i = 0; i < len; i++) {
printf("%d ", a[i]);
}
printf("\n");
// 对每个增量进行希尔排序
for (i = 0; i < n; i++) {
delta = d[i];
shellSort(a, len, delta);
printf("sort with delta %d:\n", delta);
for (j = 0; j < len; j++) {
printf("%d ", a[j]);
}
printf("\n");
}
// 输出排好序的结果
printf("the sorted datas is:\n");
for (i = 0; i < len; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
阅读全文