问题描述】利用希尔排序思想实现一系列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 48 55 4 every shellinsert px result is 13 27 48 55 4 49 38 65 97 76 13 4 48 38 27 49 55 65 97 76 4 13 27 38 48 49 55 65 76 97 the shellinsert result datas is: 4 13 27 38 48 49 55 65 76 97 使用c语言或者c++实现
时间: 2024-01-11 19:05:57 浏览: 63
希尔排序.cpp 使用C++来实现
以下是C++的实现代码,注释中有详细的说明:
```c++
#include <iostream>
#include <vector>
using namespace std;
void shellSort(vector<int>& nums, vector<int>& increments) {
int n = nums.size();
for (int i = 0; i < increments.size(); i++) {
int gap = increments[i];
// 对每个子序列进行插入排序
for (int j = gap; j < n; j++) {
int temp = nums[j];
int k = j - gap;
while (k >= 0 && nums[k] > temp) {
nums[k + gap] = nums[k];
k -= gap;
}
nums[k + gap] = temp;
}
// 输出每趟排序后的结果
cout << "every shellinsert px result is" << endl;
for (int j = 0; j < n; j++) {
cout << nums[j] << " ";
}
cout << endl;
}
}
int main() {
vector<int> increments;
int n, x;
// 输入增量序列
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x;
increments.push_back(x);
}
// 输入数据
vector<int> nums;
cout << "the resource datas is:" << endl;
while (cin >> x && x != -1) {
nums.push_back(x);
cout << x << " ";
}
cout << endl;
// 希尔排序
shellSort(nums, increments);
// 输出排序结果
cout << "the shellinsert result datas is:" << endl;
for (int i = 0; i < nums.size(); i++) {
cout << nums[i] << " ";
}
cout << endl;
return 0;
}
```
输入样例:
```
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 48 55 4
every shellinsert px result is
13 27 48 55 4 49 38 65 97 76
every shellinsert px result is
13 4 48 38 27 49 55 65 97 76
every shellinsert px result is
4 13 27 38 48 49 55 65 76 97
the shellinsert result datas is:
4 13 27 38 48 49 55 65 76 97
```
阅读全文