C++編程實戰:冒泡排序

題目描述

讀入一個n,再讀入n個數,用冒泡排序法將他們按從大到小的順序排列後輸出。

輸入

輸入文件包含兩行,第1行為一個正整數n,n<=10000,第2行為n個整數。

輸出

輸出文件僅一行,為排好序的n個數。數字之間用空格分開

樣例輸入 Copy

<code>5 23 77 17 98 65/<code>

樣例輸出 Copy

<code>98 77 65 23 17/<code>

冒泡排序的思想:以n個人站隊為例,從第1個開始,依次比較相鄰的兩個是否逆序對(高在前,矮在後),若逆序就交換這兩人,即第1個和第2個比,若逆序就交換兩人,接著第2個和第3個比,若逆序就交換兩人,接著第3個和第4個比,若逆序就交換兩人,……,直到n-1和n比較,經過一輪比較後,則把最高的人排到最後,即將最高的人像冒泡一樣逐步冒到相應的位置。原n個人的排序問題,轉換為n-1個人的排序問題。第二輪從第1個開始,依次比較相鄰的兩個人是否逆序對,若逆序就交換兩人,直到n-2和n-1比較。如此,進行n-1輪後,隊列為有序的隊列。

參考程序

<code>#include using namespace std; const int MAXN=10001; int main() { int n; double a[MAXN]; cin>>n; for (int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) //進行n輪冒泡 { for(int j=1;ja[j]) swap(a[j+1],a[j]);//相鄰兩個元素比較,若逆序就交換 } for(int i=1;i<=n;i++) cout程序運行結果