JAVA基礎篇004-冒泡排序和選擇排序的原理圖解、代碼實現、以及兩者區別詳解

目錄

一、冒泡排序:

1、排序原理

2、原理圖

3、代碼實現

二、選擇排序

1、排序原理

2、原理圖

3、代碼實現

三、兩者區別


很多小夥伴對冒泡排序和選擇排序傻傻分不清楚,今天我把這兩個排序放在一起,希望能幫助大家更好的理解它們!

一、冒泡排序:

1、排序原理

從左到右,數組中相鄰的兩個元素進行比較,將較大的放到後面。

2、原理圖

例如:int [] a = {3,7,6,4,2};

第一輪排序:比較了4次,本輪排序結束後數組變成了{3,6,4,2,7},如下圖:

                           

 

第二輪排序:比較了3次,本輪排序結束後數組變成了{3,4,2,6,7},如下圖:

以此類推...

3、代碼實現

根據上圖規律,實現如下代碼,即是冒泡排序法:

/**
 * 冒泡排序
 * N個數字冒泡排序,總共要進行N-1輪比較,每輪的排序次數爲(N-i)次比較
 * 
 * @author 百里慕溪
 */
public static void bubbleSort(int[] array) {
	// 一定要記住判斷邊界條件,很多人不注意這些細節
	if (array == null || array.length < 2) {
		return;
	}
	// 需要進行array.length輪比較
	for (int i = 0; i < array.length - 1; i++) {
		// 第i輪比較
		for (int j = 0; j < array.length - i - 1; j++) {
			// 開始進行比較,如果array[j]比array[j+1]的值大,那就交換位置
			if (array[j] > array[j + 1]) {
				int temp = array[j];
				array[j] = array[j + 1];
				array[j + 1] = temp;
			}
		}
	}
}

運行結果:

二、選擇排序

1、排序原理

第n次循環拿數組中第n個位置上的值和該位置以後的所有元素中最小的比較,如果第n個位置上的值比後面的最小的值大,那就和最小的值換位。

2、原理圖

第一輪排序:比較4次,本輪排序結束數組變成了{2, 7, 6, 4, 3},如下圖:

第二輪排序:比較了3次,本輪排序結束後數組變成了{2,3,6,4,7},如下圖:

以此類推...

3、代碼實現

/**
 * 選擇排序
 * 
 * @author 百里慕溪
 */
public static void selectSort(int[] array) {
	// 一定要記住判斷邊界條件,很多人不注意這些細節
	if (array == null || array.length < 2) {
		return;
	}
	// 數組比較次數n-1
	for (int i = 0; i < array.length - 1; i++) {
		int min = i;// 保存當前最小元素的位置
		// 遍歷待排序數組元素(i之後的元素)
		for (int j = i + 1; j < array.length; j++) {
			// 如果已排序中較大元素大於待排序元素中的最小元素,則更換元素對應索引
			if (array[min] > array[j]) {
				min = j;
			}
			// 確保找出待排序的最小元素的編號
		}
		// 置換位置
		int temp = array[min];
		array[min] = array[i];
		array[i] = temp;
	}
}

運行結果:

 

三、兩者區別

(1)冒泡排序是比較相鄰位置的兩個數,而選擇排序是按順序比較,找最大值或者最小值;
(2)冒泡排序每一輪比較後,位置不對都需要換位置,選擇排序每一輪比較都只需要換一次位置;
(3)冒泡排序是通過數去找位置,選擇排序是給定位置去找數;
冒泡排序優缺點:
    優點:比較簡單,空間複雜度較低,是穩定的;
    缺點:時間複雜度太高,效率慢。
選擇排序優缺點:
    優點:一輪比較只需要換一次位置;
    缺點:效率慢,不穩定。

JAVA基礎篇專欄持續更新中,更多JAVA基礎知識請移步專欄垂閱,希望對您有幫助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章