算法詳解之選擇排序算法

算法思想

選擇排序 是一種簡單直觀的排序算法,它的工作原理是:第一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小(大)元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的數據元素的個數爲零。選擇排序是不穩定的排序方法。

時間複雜度

選擇排序 需要從頭到尾遍歷所有元素來進行對比,因此其時間複雜度爲:
O(n2) O(n ^ 2)

適用場景

由選擇排序的時間複雜度可知,該排序算法適用於數據規模越小越好

對比冒泡排序

選擇排序冒泡排序 的時間複雜度都是 O(n2)O(n ^ 2) ,那麼它們之間的區別是什麼呢?其實兩者的算法思想很相似,都是對比並交換位置,但是前者是每輪找到最小值然後再與第一個元素進行交換位置,而後者是兩兩對比並立即交換位置,也就是說同一數據集的情況下,選擇排序要比冒泡排序減少了交換次數。

算法步驟

1、首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置;
2、再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾;
3、重複第二步,直到所有元素均排序完畢。

動圖演示

選擇排序

代碼實現

JavaScript實現

function selectionSort(arr) {
	var len = arr.length;
	var minIndex, temp;
	//需要經過N-1輪對比
	for (var i = 0; i < len - 1; i++) {
		minIndex = i;  //最小值的索引
		for (var j = i + 1; j < len; j++) {
			if (arr[j] < arr[minIndex]) {
				minIndex = j;  //找到最小值並更新其索引
			}
		}
		temp = arr[i];
		arr[i] = arr[minIndex];
		arr[minIndex] = temp;
	}
	return arr;
}

Python實現

def selectionSort(arr):
	for i in range(len(arr)):
		min_index = i  # 最小值索引
		for j in range(i + 1, len(arr)):
			if arr[j] < arr[min_index]:
				min_index = j
		if i != min_index:
			arr[i], arr[min_index] = arr[min_index], arr[i]
	return arr

Java實現

public int[] selectionSort(int[] sourceArray) {
	//複製源數組
	int[] arr = Arrays.copyOf(sourceArray,sourceArray.length);
	//總共需要經過N-1輪比較
	for(int i = 0; i < arr.length - 1; i++) {
		//最小值的索引
		int minIndex = i;
		//每輪循環需要 N-i次對比
		for (int j = i + 1; j < arr.length; j++) {
			//找到本輪的最小值,並更新其索引
			if (arr[j] < arr[minIndex]) {
				minIndex = j;
			}
		} 
		//找到最小值和i位置所在的值進行交換
		if (i != minIndex) {
			int temp = arr[i];
			arr[i] = arr[minIndex];
			arr[minIndex] = temp;
		} 
	}
	return arr;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章