選擇排序是一種直觀的排序算法。 算法
第一次從數組中找出最小或者最大的元素。存放在起始位置,而後再從未排序的數據中找出最小或最大的元素,而後放在已排序元素末尾。依次類推直到未排序的元素個數爲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