1. 程式人生 > >氣泡排序簡記以及其與選擇排序的區別

氣泡排序簡記以及其與選擇排序的區別

氣泡排序

  • 所謂的氣泡排序,其基本概念是,依次比較相鄰兩個數的大小,如果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 ; }

補充

需要注意的是,雖然二者都是基於一種比較的方法,但是具體細節還是有很大的差別的,值得注意。