冒泡排序算法的C++實現


直接上代碼:

#include <iostream>
using namespace std;

void BubbleSort(int arr[],int n){

    while(n-->0)    //在本例中,第1次執行while時,n的值為9,即(n-1)
    for(int i=0;i<n;i++){
        //如果當前元素比后面相鄰的元素大,則交換相鄰元素數值
        if(arr[i]>arr[i+1])
            swap(arr[i],arr[i+1]);

    }
}

int main(){

    int a[10]={10,9,8,7,6,5,4,3,2,1};
    BubbleSort(a,10);
    for(int i=0;i<10;i++){
        cout<<a[i]<<" ";
    }
    cout<<endl;
    return 0;
}

考慮一下,如果冒泡法在執行期間,執行到某個元素(不是最后一個元素),此時如果序列已經有序,那么算法會停下來嗎?答案當然是否定的,只有遍歷完整個待排序序列算法才會停下來。那么后面剩余元素的遍歷就成了徒勞的浪費時間,因此,我們可以為我們的算法立個flag來標記一下,以確定它不會執行多余操作。

那么冒泡排序算法結束的條件就是:在一趟排序過程中沒有發生元素的交換。

所以我們可以對關鍵代碼做以下優化


 

void BubbleSort(int arr[],int n){

    int flag;    //標記
    while((n--)>0){
        flag=0;        //標記初始值為0
    for(int i=0;i<n;i++){
        if(arr[i]>arr[i+1]){
          swap(arr[i],arr[i+1]);
          flag=1;        //如果發生交換,標記就重置為1
        }
    }
    if(flag==0)        //如果標記還是初始值,那么證明這一趟沒有發生數值交換,即完成排序
        return;
}
}

對於冒泡排序,一趟排序后能確保一個關鍵字到達其最終位置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM