1. 程式人生 > >【排序】圖解選擇排序

【排序】圖解選擇排序

一、思想

首先,找到陣列中最小的那個元素,其次,將它和陣列的第一個元素交換位置(如果第一個元素就是最小元素那麼就和自己交換)。在剩下的元素中找到最小的元素,將它與陣列的第二個元素交換位置。如此往復,直到將整個陣列排序。這種方法叫做選擇排序,因為它在不斷地選擇剩餘元素之中的最小者。

二、圖解過程

選擇排序

三、核心程式碼

//選擇排序演算法
public static void selectionSort(int[] arr) {
	//不滿足交換條件
	if (arr == null || arr.length < 2) {
		return;
	}
	for (int i =
0; i < arr.length - 1; i++) { //尋找當前迴圈最小元素的下標 int minIndex = i; for (int j = i + 1; j < arr.length; j++) { minIndex = arr[j] < arr[minIndex] ? j : minIndex; } swap(arr, i, minIndex); } } //交換陣列中的兩個元素 public static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[
j]; arr[j] = tmp; }

四、複雜度分析

1、時間複雜度:O(N^2)

若待排序的元素總數為N,第一次內迴圈比較N-1次(與除了本身的所有元素進行比較,找出最值),第二次內迴圈比較N-2次,以此類推,最後一次內迴圈比較1次。總共比較(N-1) + (N-1) + ... + 1次,等差求和,時間複雜度為O(N^2)

2、額外空間複雜度:O(1)

未藉助其它輔助空間。

完整原始碼