選擇排序

選擇排序

前言

選擇排序是一種直觀的排序算法。 算法

思想

第一次從數組中找出最小或者最大的元素。存放在起始位置,而後再從未排序的數據中找出最小或最大的元素,而後放在已排序元素末尾。依次類推直到未排序的元素個數爲0 數組

代碼

public void selectSort(int []arr){
	for(int i=0;i<arr.length-1;i++){
		//最小元素的索引
		int min=i;
		for(int j=i+1;j<arr.length;j++){
			if(arr[j]<arr[min]){
				min=j;
			}
		}
		if(min!=i){
			int temp=arr[min];
			arr[min]=arr[i];
			arr[i]=temp;
		}
	}
}
複製代碼

複雜度分析

簡單選擇排序的比較次數與序列的初始排序無關。 假設待排序的序列有 N 個元素,則比較次數老是N (N - 1) / 2。 而移動次數與序列的初始排序有關。當序列正序時,移動次數最少,爲 0. 當序列反序時,移動次數最多,爲3N (N - 1) / 2。 因此,綜合以上,簡單排序的時間複雜度爲 O(N^2)。bash

穩定性分析

選擇排序是給每一個位置選擇當前元素最小的,好比給第一個位置選擇最小的,在剩餘元素裏面給第二個元素選擇第二小的,依次類推,直到第n-1個元素,第n個元素不用選擇了,由於只剩下它一個最大的元素了。那麼,在一趟選擇,若是一個元素比當前元素小,而該小的元素又出如今一個和當前元素相等的元素後面,那麼交換後穩定性就被破壞了。比較拗口,舉個例子,序列5 8 5 2 9,咱們知道第一遍選擇第1個元素5會和2交換,那麼原序列中兩個5的相對先後順序就被破壞了,因此選擇排序是一個不穩定的排序算法。spa

更多推薦

歸併排序詳解code

快速排序詳解cdn

插入排序詳解blog

相關文章
相關標籤/搜索