最近在面試應屆生,出了幾道簡單的面試題,冒泡法排序就是其中之一。很多人覺得冒泡簡單,就疏忽了。網上搜了下,也流傳著很多錯誤的寫法。自己手寫了一遍,也算是復習吧。
C++代碼如下:
#include "stdafx.h" /************************************************************************/ /* 冒泡排序 */ /************************************************************************/ void BubbleSort(int data[], int n) { for (int i=0; i<n-1; i++) { bool exchange = false; for (int j=0; j<n-i-1; j++) { if (data[j] > data[j+1]) { int tmp = data[j]; data[j] = data[j+1]; data[j+1] = tmp; exchange = true; } } if (!exchange) break; } } int _tmain(int argc, _TCHAR* argv[]) { int data[10]={-100, 79, -3, 0, 49, 21, 8, 200, 12341, 0}; BubbleSort(data, 10); return 0; }
注意兩個問題:
1. 冒泡法排序比較的是相鄰的兩個元素,而不是頭元素和之後的幾個元素相比,網上一些寫法錯誤於此,歸根結底就是自己沒有實際去手寫一邊冒泡排序,想當然了;
2. 注意循環結束的條件,並不是一定要一直比較直到程序結束,而是當一次比較過程中沒有交換操作的時候,程序即可終止。