本题目要求读入N个整数,采用希尔排序法进行排序,采用增量序列{5,3,1},输出完成增量5和增量3后的5子排序和3子排序结果。
输入格式:
输入不超过100的正整数N和N个整数(空格分隔)。
输出格式:
输出两行,第一行为5子排序结果,第二为3子排序结果。数据间用一个空格分隔。
为简便起见,最后一个元素后也有一个空格。
输入样例:
8
8 1 6 5 4 2 3 7
输出样例:
2 1 6 5 4 8 3 7
2 1 6 3 4 8 5 7
代码实现:
#include <stdio.h>
void shellSort(int arr[], int n, int gap) {
for (int i = gap; i < n; i += 1) {
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;
}
}
int main() {
int N;
scanf("%d", &N);
int arr[100];
for (int i = 0; i < N; i++) {
scanf("%d", &arr[i]);
}
if (N >= 5) {
shellSort(arr, N, 5);
for (int i = 0; i < N; i++) {
printf("%d ", arr[i]);
}
printf("\n");
} else {
for (int i = 0; i < N; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
if (N >= 3) {
shellSort(arr, N, 3);
for (int i = 0; i < N; i++) {
printf("%d ", arr[i]);
}
printf("\n");
} else {
}
return 0;
}