7-12 排序 (25 分)(希爾排序模板,內贈插入排序模板)
阿新 • • 發佈:2019-01-05
給定N個(長整型範圍內的)整數,要求輸出從小到大排序後的結果。
本題旨在測試各種不同的排序演算法在各種資料情況下的表現。各組測試資料特點如下:
- 資料1:只有1個元素;
- 資料2:11個不相同的整數,測試基本正確性;
- 資料3:103個隨機整數;
- 資料4:104個隨機整數;
- 資料5:105個隨機整數;
- 資料6:105個順序整數;
- 資料7:105個逆序整數;
- 資料8:105個基本有序的整數;
- 資料9:105個隨機正整數,每個數字不超過1000。
輸入格式:
輸入第一行給出正整數N(≤105),隨後一行給出N個(長整型範圍內的)整數,其間以空格分隔。
輸出格式:
在一行中輸出從小到大排序後的結果,數字間以1個空格分隔,行末不得有多餘空格。
輸入樣例:
-
11
4 981 10 -17 0 -20 29 50 8 43 -5
-
輸出樣例:
-
-20 -17 -5 0 4 8 10 29 43 50 981
-
#include <iostream> #include <algorithm> #include <cstdio> #include <vector> #include <stack> #include <queue> #include <cmath> using namespace std; int main() { int n,i; cin>>n; vector<int> a; for(int i=0;i<n;i++){ int num; cin>>num; a.push_back(num); } for(int d=n/2;d>0;d/=2){//shell排序增量 for(int p=d;p<n;p++){//插入排序的模板 int tmp=a[p]; for(i=p;i>=d&&a[i-d]>tmp;i-=d) a[i]=a[i-d]; a[i]=tmp; } } for(int j=0;j<n;j++){ if(!j) cout<<a[j]; else cout<<" "<<a[j]; } return 0; }