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;
}
posted @ 2021-03-30 14:26  shenlei_blog  阅读(46)  评论(0)    收藏  举报