每一趟從待排序的記錄中選出最小的元素,順序放在已排好序的序列最後,知道所有記錄排序完畢。 基於此思想的算法主要有:簡單選擇排序、樹形選擇排序和堆排序。算法
數組int[] arr = {5,8,5,2,9};數組
第一趟排序:排序
{5 8 5 2 9}進行比較,最小數據是 2 ,把 2 放在首位,也就是2 和第一個 5 互換位置圖片
排序結果:2 8 5 5 9it
第二趟排序:原理
除 2 以外的數據{5 8 5 9}進行比較,5最小,不用交換。im
排序結果:2 5 8 5 9數據
第三趟排序:img
除 2 5以外的{8 5 9}進行比較了,5最小,將 5 和 8 交換位置移動
排序結果:2 5 5 8 9
第四趟排序:
除2 5 5 以外的{8 9}進行比較,不用交換,此時只剩下一個元素 9,不用再進行一趟排序。排序結束
排序結果:2 5 5 8 9
選擇排序的時間複雜度:簡單選擇排序的比較次數與序列的初始排序無關。 假設待排序的序列有 N 個元素,則比較次數永遠都是N (N - 1) / 2。而移動次數與序列的初始排序有關。當序列正序時,移動次數最少,爲 0。當序列反序時,移動次數最多,爲3N (N - 1) / 2。
因此,綜上,簡單排序的時間複雜度爲 O(N2)。
序列5 8 5 2 9, 咱們知道第一遍選擇第1個元素5會和2交換,那麼原序列中2個5的相對先後順序就被破壞了,因此選擇排序不是一個穩定的排序算法。