C++冒泡排序


冒泡排序,說起來應該是最簡單的。給出一組無序數組,用什么方法來進行排序呢。比如2、3、7、1、6這組數據,要將它按照從小到大的順序排列起來。首先想到將第一個數A與后面的數比較如果后面的數比較大,那么這兩個數的順序是正確的。將當前A更新成后面較大的數,然后再與后面的比較。遇到比自己小的進行交換,但是不更新A。

如例:

1.第一次比較,2比3小,執行后2、3、7、1、6

2.第二次比較,3比7小,執行后2、3、7、1、6

3.第三次比較,7比1大,執行后2、3、1、7、6

4.第四次比較,7比6大,執行后2、3、1、6、7

這樣一來,通過一次遍歷比較成功的將最大的數冒泡到了數組尾端。

//
//  main.cpp
//  BubbleSort
//
//  Created by MadMarical on 15/11/19.
//  Copyright (c) 2015年 com. All rights reserved.
//

#include <iostream>

using namespace std;

void bubbleSort(int* pData,int length)
{
    int temp;
    for(int i = 0;i != length;++i)
    {
        for (int j = 0; j != length; ++j)
        {
            if (pData[i] < pData[j])
            {
                temp = pData[i];
                pData[i] = pData[j];
                pData[j] = temp;
            }
        }
    }
}

void print(int* pData,int length)
{
    for (int i = 0; i != length; ++ i)
    {
        cout<<pData[i]<<" ";
    }
    cout<<endl;
}

int main(int argc, const char * argv[])
{
    int pData[] = {2,3,7,1,6};
    BubbleSort(pData,5);
    
    cout<<"the result is:";
    
    print(pData,5);
    
    return 0;
}

運行結果:

the result is:1 2 3 6 7 

反思:

1.為什么需要用指針參數?

  因為函數返回值無法為數組,所以只能設置空類型的函數,利用形參如何改變實參的值呢?指針參數就是最佳選擇。

2.這種排序的效率如何?

  每一個數都需要全數組遍歷,所以當數組長度為N時,需要N*N次遍歷操作。時間效率上位O(N^2)。但是我們使用的變量極少,只利用了一個temp保存A值,所以空間復雜度為O(1)。

 


免責聲明!

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



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