冒泡排序

冒泡排序

是一種簡單的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,若是他們的順序錯誤就把他們交換過來。走訪數列的工做是重複地進行直到沒有再須要交換,也就是說該數列已經排序完成。這個算法的名字由來是由於越小的元素會經由交換慢慢「浮」到數列的頂端。ios

冒泡排序對n個項目須要O(n^2)的比較次數,且能夠原地排序。儘管這個算法是最簡單瞭解和實做的排序算法之一,但它對於少數元素以外的數列排序是很沒有效率的。算法

冒泡排序是與插入排序擁有相等的執行時間,可是兩種法在須要的交換次數卻很大地不一樣。在最壞的狀況,冒泡排序須要O(n^2)次交換,而插入排序只要最多O(n)交換。冒泡排序的實現(相似下面)一般會對已經排序好的數列拙劣地執行(O(n^2)),而插入排序在這個例子只須要O(n)個運算。所以不少現代的算法教科書避免使用冒泡排序,而用插入排序取代之。冒泡排序若是能在內部循環第一次執行時,使用一個旗標來表示有無須要交換的可能,也有可能把最好的複雜度下降到O(n)。在這個狀況,在已經排序好的數列就無交換的須要。若在每次走訪數列時,把走訪順序和比較大小反過來,也能夠稍微地改進效率。有時候稱爲往返排序,由於算法會從數列的一端到另外一端之間穿梭往返。spa

冒泡排序算法的運做以下:設計

  1. 比較相鄰的元素。若是第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素做一樣的工做,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對全部的元素重複以上的步驟,除了最後一個。
  4. 持續每次對愈來愈少的元素重複上面的步驟,直到沒有任何一對數字須要比較。

因爲它的簡潔,冒泡排序一般被用來對於程式設計入門的學生介紹算法的概念。code

#include<iostream>
using namespace std;
int data[10]={8,9,4,6,2,1,4,6,8,0};

int myBubbleSort(int ds[],int length){

    for(int i=length-1;i>0;i--)
        for(int j=0;j<=i;j++)
            if(ds[j-1]>ds[j]){
                int temp=ds[j-1];
                ds[j-1]=ds[j];
                ds[j]=temp;
            }
return 0;
}

int main(){
    myBubbleSort(data,10);
    for(int i=0;i<10;i++)
        cout<<data[i]<<endl;
    getchar();
return 0;
}
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息