最近在面試應屆生,出了幾道簡單的面試題,冒泡法排序就是其中之一。很多人覺得冒泡簡單,就疏忽了。網上搜了下,也流傳著很多錯誤的寫法。自己手寫了一遍,也算是復習吧。
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. 注意循環結束的條件,並不是一定要一直比較直到程序結束,而是當一次比較過程中沒有交換操作的時候,程序即可終止。