氣泡排序簡記以及其與選擇排序的區別
阿新 • • 發佈:2019-02-03
氣泡排序
- 所謂的氣泡排序,其基本概念是,依次比較相鄰兩個數的大小,如果num[i] > num[i+1],則將小數放在前面,大數放在後面。如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,此時最大的數字一定在陣列的尾部。
- 在第二趟比較時,仍從第一對數開始比較 (因為可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前中,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重複以上過程,直至最終完成排序。
- 這個演算法的名字由來是因為越大的元素會經由交換慢慢 “浮”
void bubbleSort(vector<int>& nums) {
int n = nums.size();
if (n < 2) return;
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-i-1; j++) {
if (nums[j] > nums[j+1])
swap(nums[j], nums[j+1]);
}
return ;
}
選擇排序
- 對於選擇排序,第一次從下標為0的開始下標為0的這個數與後面的n-1個進行比較;找出最小或者最大的放在下標為0的這個位置;第二次從下標為1的開始比較;查詢剩下的最大或者最小值;放在下標為1的位置;以此類推;直到排序完成。
void bubbleSort(vector<int>& nums) {
int n = nums.size();
if (n < 2) return;
for (int i = 0; i < n-1; i++)
for (int j = i; j < n; j++) {
if (nums[i] > nums[j])
swap (nums[i], nums[j]);
}
return ;
}
補充
需要注意的是,雖然二者都是基於一種比較的方法,但是具體細節還是有很大的差別的,值得注意。