程序員都知道的排序算法合集

1.1 冒泡排序原理

  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。1
  2. 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。 1
  3. 針對所有的元素重複以上的步驟,除了最後一個。 1
  4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。 一個具有註腳的文本。1

舉個例子

利用冒泡排序對下面 n 個元素按照從大到小的順序進行排序: (1,5,3,9,12,7,15,10)

動畫演示

對於例中的 n 個元素的排序過程如下:

在這裏插入圖片描述
Tip: 相鄰元素比較次數爲 n-1 次

Java語言實現

public class Sort {
	public static void bubbleSort(int[] arr) {
		for(int i = 0; i < arr.length; i++) {
			boolean flag = false;
			for(int j = 0; j < arr.length-1; j++) {
				if(arr[j] < arr[j+1]) {
					int t = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = t;
					flag = true;
				}
			}
			if(flag == false){
				break;
			}
		}
	}
}

Tip: 這裏使用 flag 來處理已經排序好的情況

測試結果

public class Test {
	public static void main(String[] args) {
		int[] arr = new int[]{1,5,3,9,12,7,15,10};
		Sort.bubbleSort(arr);
		for(int a: arr) {
			System.out.println(a);
		}
	}
}/*output:
[15, 12, 10, 9, 7, 5, 3, 1]
*/

時間複雜度分析

最好的情況下:元素已經按照大小順序排序,只需要比較 n-1 次,時間複雜度爲 O(n)

最壞的情況下:元素按照倒序排序,需要執行 n (n - 1) 次比較,時間複雜度爲O( n2 )


1.2 選擇排序原理

在未排序的序列中找到最大(最小值)依次有序放入排序好的序列中。

舉個例子

利用選擇排序對下面 n 個元素按照從大到小的順序進行排序: (1, 5, 3, 9, 12, 7, 15, 10)

動畫演示

在這裏插入圖片描述

Java語言實現

public class Sort {
	public static void selectSort(int[] arr) {
		int maxId;
		for(int i = 0; i < arr.length; i++) {
			maxId = i;
			for(int j = i+1; j < arr.length; j++) {
				if(arr[j] > arr[maxId]) {
					maxId = j;
				}
			}
			int t = arr[i];
			arr[i] = arr[maxId];
			arr[maxId] = t;
		}
	}
}

測試結果

import java.util.Arrays;

public class Test {
	public static void main(String[] args) {
		int[] arr = new int[] {1, 5, 3, 9, 12, 7, 15, 10};
		Sort.selectSort(arr);
		System.out.println(Arrays.toString(arr));
	}
}/*output:
[15, 12, 10, 9, 7, 5, 3, 1]
*/

時間複雜度分析

選擇排序無論是哪個元素進去,都要進行兩次循環操作,所以時間複雜度爲 O(n2)


  1. 參考資料:呂新平、劉宏銘.二級公共基礎知識實戰訓練教程:西安交通大學出版社,2006.02 ↩︎ ↩︎ ↩︎ ↩︎

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