思路:emmmmmm 就是希尔排序~
注意提干哈 他只需要第一趟
题目:用希尔排序对一组数据排序。
问题描述:
输入一个长度为n(n<100)的整数数组,并实现用希尔排序对数组中的元素排序,输出第一趟排序后的数据。(希尔排序中的增量设置为increment=n/2向下取整,increment=increment/2向下取整,直到increment=1)
输入格式:
首先输入串的长度n,然后输入整数数组.
输出格式:
输出第一趟希尔排序后的数组。
样例输入:
8
48 26 66 57 32 85 55 19
样例输出:
32 26 55 19 48 85 66 57
思路:emmmmmm 就是希尔排序~
注意提干哈 他只需要第一趟
#include<iostream>
#define MAXSIZE 100
using namespace std;
void shell(int num[], int n) {
int d;
for (d = n / 2; d >=1; d /= 2) { //步长初始化
for(int i=0;i<d;i++){ //第一个元素下标
for(int j=i;j<n;j+=d){ //冒泡一下
for(int k=i;k+d<n-(j-i);k+=d){
if(num[k]>num[k+d]){
swap(num[k],num[k+d]);
}
}
}
}
break; //题干只要第一趟
}
}
int main() {
int n;
cin>>n;
int num[MAXSIZE] = {0};
for (int i = 0; i < n; i++) {
cin >> num[i];
}
shell(num, n);
for (int i = 0; i < n; i++) {
cout << num[i]<<' ';
}
return 0;
}