冒泡排序(Bubble Sort):首先將記錄的第一個關鍵字和第二個的關鍵字比較,如果第一個比第二個大那麼就交換第一個和第二個的位子,然後將第二個和第三個比較…以此類推知道將第n-1和第n個比較,那麼這樣一趟下來可以保證最大的一個記錄“沉”到了最後面,這樣在對第1到第n-1冒泡,一般第i趟冒泡到n-i+1,要循環n-1次。
比如說有記錄:49 38 65 97 76 13 27
第一趟:
第一次比較結果:38 49 65 97 76 13 27 //將48和38比較,49比38大,交換位置
第二次比較結果:38 49 65 97 76 13 27 //將49和65比較,49比65小,位置不變
第三次比較結果:38 49 65 9776 13 27
第四次比較結果:38 49 65 76 9713 27
第五次比較結果:38 49 65 76 13 9727
第六次比較結果:38 49 65 76 13 27 97 //第一趟的結果,將最大97“沉”到了最後面
第二趟:
第一次比較結果:38 49 65 76 13 2797
第二次比較結果:38 49 65 76 13 27 97
第三次比較結果:38 49 65 76 13 2797
第四次比較結果:38 49 65 13 76 27 97
第五次比較結果:38 49 65 13 27 7697 //第二趟比較過程中,只需要比較到倒數第二的位置,因爲最後一個數一定是最大的,第二趟的結果,將倒數第二大的76“沉”到的後面
第三趟:
第一次比較結果:38 49 65 13 27 76 97
第二次比較結果:38 49 65 13 27 76 97
第三次比較結果:38 49 13 65 27 76 97
第四次比較結果:38 49 13 27 6576 97
第四趟:
……
第五趟:
……
第六趟
……
注意:在比較過程中如果某一趟沒有發生位置交換,那麼說明已經排好序,沒有必要在進行下去
冒泡排序的時間複雜度爲:O(n^2)
C++代碼:
void myBubbleSort(int* arr,int len)
{
bool isChange = true; //用來記錄某一趟中是否發生了交換
for (int i = 0; i < len-1; i++) //控制
{
if(!isChange)//如果沒有交換說明已經排序好了
break;
isChange = false;
for (int j = 0; j < len-i-1; j++)
{
if (arr[j] > arr[j+1])
{
isChange = true;
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}