選擇排序

一、選擇排序(ChooseSort)

每次選擇一個數,與全部數分別比較,確定出最小值的座標,然後與選擇的數進行交換。算法不穩定。

選擇排序的時間複雜度爲O(n^2),空間複雜度爲O(1)。最好最壞也就是平均是O(n^2)

 

二、圖解

每次記錄最小值的座標,然後與選擇的數進行交換

 

 

三、算法分析

步驟:

1、需要排序的數組

2、第一次for循環,n-1次選擇數

3、定義變量index保存當前循環索引值,每當數比選擇的數要小,則改變index爲數小的索引值,最終index爲最小數的索引

4、判斷當前循環索引值是否與index相同,相同則不作任何操作,否則互換兩個索引的值

 

四、算法實現

package com.arithmetic.sort;

/**
 * @Description
 * 功能:實現選擇排序
 * 每次選擇一個數爲標準,找出最小的數,最後將選擇的數和最小數交換位置
 * 時間複雜度O(n^2);空間複雜度O(1);不穩定;算法複雜度最好與最壞情況都是O(n^2)
 * @Author xuexue
 * @Date 2019/11/9 20:25
 */
public class ChooseSort {
    public static void main(String[] args) {
        int[] arrs = new int[]{3, 5, 2, 1, 4, 10};

        chooseSort(arrs);
        for (int arr : arrs) {
            System.out.println(arr);
        }

    }

    /**
     * 選擇排序算法實現
     * 1、需要排序的數組
     * 2、第一次for循環,n-1次選擇
     * 3、定義變量index保存當前的循環索引值,如果找出了最小的數,則改變index的下標爲最小數索引
     * 4、內循環,判斷並找出最小的數,保存其索引值
     * 5、判斷當前循環索引值是否與index相同,相同則不作任何操作,否則互換兩個索引的值
     * @param arr
     */
    public static void chooseSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {//每一次選擇的數 總共需要選擇n-1個
            //每一次選擇的數和其它數 算法複雜度:n-1/n-2/n-3/../1 (1+n-1)n/2=n^2
            int index = i;//記錄最小數的位置

            for (int j = i + 1; j < arr.length; j++) {
                //與冒泡排序比較,交互次數少,但是不穩定如 2 5 2 1 4
                if (arr[index] > arr[j])
                    index = j;//記錄最小數位置
            }

            //進行交換 最多交換n-1次
            if (index != i) {
                int temp = arr[i];
                arr[i] = arr[index];
                arr[index] = temp;
            }
        }
    }
}

 

運行結果:

 

 

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