2020-3-30 希尔排序思想和实现
希尔排序主要解决的插入排序遇到数据多,且数据不规律的问题,通过预先处理的方式,可以将数据大体上进行一次排序再使用插入排序,希尔排序里面回使用几次插入排序
#include<bits/stdc++.h>
using namespace std;
int main(){
//管理输入
int n;
while(cin>>n){
vector<int> arr;
while(n--){
int num;
cin>>num;
arr.push_back(num);
}
//希尔排序实现
for (int gap = arr.size(); gap>0 ;gap/=2){
//gap为增量,每次增量递减为原来的一半,拆分后的数组增加为原来的一倍。
// 从第gap个元素 逐步对其所在组进行
//直接插入如排序
for (int i = gap ; i < arr.size() ; i++){
//下面的操作就是插入排序的操作,只不过操作间隔(看作两个数据是相邻的)不是1,而是gap;
int j = i;
int temp = arr[j];
if (arr[j] < arr[j-gap]){
while (j-gap>= 0 && temp<arr[j-gap]){
arr[j] = arr[j-gap];
j -= gap;
}
arr[j] = temp;
}
}
}
for(auto x:arr){
cout<<x<<" ";
}
arr.clear(); //清空输入的数据
}
return 0;
}
浙公网安备 33010602011771号