1. 選擇排序

思想

每次選擇未排序元素中的最小值,將其放在最左邊。

想象你打牌的時候,如果你手上有一堆牌,你每次找到最小的牌,然後將其出出來。手上的是未排序的牌,出出去的牌按順序擺出來,就是已排序的。

比較耗時:第一次比較n,第二次比較n-1,以此類推

插入耗時:插入策略分爲,移動選定元素前的元素,然後插入最小值;或者不斷交換相鄰元素,直到最小值到達所在位置;或者找到最小元素後,直接與需要排序的位置進行交換

前一個方案,只要複製一條語句即可,然後進行一次交換。第二種交換,每一次交換,需要三條語句。第三種,只需要一次交換。

實現

import java.util.Arrays;

public class SelectionSort {
    public static void main(String[] args) {
        int[] nums = {5, 7, 3, 2, 9, 4, 2, 6, 8};
        selectSort(nums);
        System.out.println(Arrays.toString(nums));
    }

    public static void selectSort(int[] nums){
        //記錄排序部分的最後索引值
        for (int i = 0; i < nums.length; i++) {
            // 記錄未排序部分的開始值
            int min_value = nums[i];
            int min_index = i;
            for (int j = i; j < nums.length; j++) {
                // 找到未排序數組中的最小值及位置
                if(nums[j]<min_value){
                    min_value = nums[j];
                    min_index = j;
                }
            }
            // 找到了未排序數組中的最小值,然後跟要排序位置交換位置
            nums[min_index] = nums[i];
            nums[i] = min_value;
        }
    }
}

複雜度分析

從上面分析上,可以看到,時間消耗主要是在找到最小值上。

n+n-1+n-2+…

所以時間複雜度爲O(n^2)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章