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</<code>

程序運行結果

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


分享到:


相關文章: