排序演算法之冒泡排序

來源:互聯網
上載者:User

標籤:排序演算法   c++   面試   資料結構   冒泡排序   

基本思想:

冒泡排序是通過交換兩個元素實現的,其思想是:

第一趟將待排序序列(A[0]~A[n-1])從前往後,兩兩相鄰元素進行比較,若後者小,則交換,比較n-1次;

第一趟結束後,最大元素被交換到A[n-1]處(即沉底),下一趟排序只需要在(A[0]~A[n-2])中進行;

若在某趟排序中,未交換元素,說明子序列已經有序,則不在進行下一趟排序。該方法最多進行n-1趟。


冒泡排序樣本:


代碼:

void BubbleSort(int A[],int n)//冒泡排序{int i, j ,last;i=n-1;while(i>0){last=0;//最多進行n-1趟for(j=0; j<i; j++)//從前往後比較{if(A[j+1]<A[j])//前面一個較大,就交換{swap(A[j],A[j+1]);    last=j;}}i=last;//若一趟排序中沒有交換元素,則last為0,i為0跳出迴圈}}


改進的冒泡演算法:

正向和反向進行最大值和最小值的排序。(ps:其實有些筆者將上面的演算法思想也看作冒泡的改進演算法~~)

void ImproveBubbleSort(int A[],int n)//改進冒泡{int low,high,j;low=0;high=n-1;while(low<high){for(j=low; j<high; j++)//從前往後,大的交換到後面{if(A[j+1]<A[j])//如果前一個比後一個大,交換{swap(A[j],A[j+1]);}}--high;for(j=high; j>low; j--)//從後往前,小的交換到前面{if(A[j]<A[j-1])//如果後一個比前一個小,交換{swap(A[j],A[j-1]);}}++low;}}

時間複雜度分析:

冒泡排序最好情況下只需進行一趟排序,n-1次比較,因此最好情況下時間複雜度是O(n),無需移動元素;最壞的情況下進行n-1趟,第 i 趟比較 n-i次,最壞的情況下時間複雜度是O(n^2)。

此外,冒泡經過一趟排序後,最終確定元素的最終位置,冒泡排序是穩定的排序方法。


參考資料:

《資料結構》 陳慧楠著  人民郵電出版社

排序演算法之冒泡排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.