冒泡排序,說起來應該是最簡單的。給出一組無序數組,用什么方法來進行排序呢。比如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)。