排序概念與插入排序-7-1 排序 (25 分)
阿新 • • 發佈:2018-12-01
給定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 <bits/stdc++.h> using namespace std; int main() { int a[100010]; int n; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=1;i<n;i++){ int j=i-1; while(j>=0&&a[i]<a[j]){ j--; } int temp=a[i]; for(int k=i-1;k>j;k--){ a[k+1]=a[k]; } a[j+1]=temp; } for(int i=0;i<n;i++){ if(i!=0)cout<<" "; cout<<a[i]; } cout<<endl; }
之後感覺有點繁瑣,優化了一下。。。
#include <bits/stdc++.h> using namespace std; int main() { int a[100010]; int n; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=1;i<n;i++){ int j=i; while(j>0&&a[j]<a[j-1]){ int temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; j--; } } for(int i=0;i<n;i++){ if(i!=0)cout<<" "; cout<<a[i]; } cout<<endl; }