從零開(kāi)始數(shù)據(jù)結(jié)構(gòu)與算法(二)之選擇排序

2.選擇排序

實(shí)現(xiàn)思想:選擇排序也稱為直接選擇排序(面試不用提),默認(rèn)將第一個(gè)作為最小值,遍歷一次當(dāng)前最小值向后移一位,將前面找出的最小值,看成一個(gè)有序列表,后面的看成無(wú)序列表,然后找出無(wú)序列表中最小值然后與最小值參照物進(jìn)行對(duì)比替換。

選擇與冒泡的區(qū)別:①選擇排序一般是找最小值,冒泡可以升序與降序;②選擇是選擇每一個(gè)下標(biāo)作為最小值參照物,分為了有序列表與無(wú)序列表,冒泡排序無(wú)參照物;③冒泡排序最好時(shí)間復(fù)雜度是O(n),選擇排序時(shí)間復(fù)雜度都是O(n^2);④選擇排序因?yàn)橹貜?fù)對(duì)比的原因,有可能出現(xiàn)兩個(gè)相同值位置不同,也就是不穩(wěn)定.

簡(jiǎn)單來(lái)說(shuō):冒泡排序就是將每一個(gè)數(shù)與所有數(shù)進(jìn)行比較,將最小(大)數(shù)放到最前面的排序算法;選擇排序就是將前面排序好的有序列表的最小值與后面待排序的無(wú)序列表進(jìn)行比較,找出最小值的排序算法。

選擇排序首次引進(jìn)了參照物的概念。

package deepinsea.十大經(jīng)典排序算法;

import java.util.Arrays;

/**
 * @author deepinsea
 * 時(shí)間復(fù)雜度:O(n^2) 最好:O(n^2) 最壞:O(n^2)
 */
public class 選擇排序 {
    public static void main(String[] args) {
        int[] arr = new int[]{2, 1, 5, 8, 2, 9, 7, 6};
        System.out.println(Arrays.toString(arr));
        selectSort(arr);
        System.out.println(Arrays.toString(arr));
    }
    
    /**
     * 選擇排序
     */
    public static int[] selectSort(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            // 默認(rèn)將第一個(gè)作為最小值,依次根據(jù)下標(biāo)變化當(dāng)前無(wú)序列表中的最小值
            int min = arr[i];
            // 記錄最小值的下標(biāo)
            int index = i;
            //通過(guò)與后面的數(shù)據(jù)進(jìn)行比較得出最小值和下標(biāo)
            for (int j = i + 1; j < arr.length; j++) {
                if (min > arr[j]) {
                    // 記錄無(wú)序列表中的最小值與下標(biāo)
                    min = arr[j];
                    index = j;
                }
            }
            // 將無(wú)序列表中的最小值與當(dāng)前最小值參照物進(jìn)行對(duì)比替換
            // 第一個(gè)最小值其實(shí)已經(jīng)是最小的了,后面有序列表的參照物依次從小到大
            // 這樣其實(shí)會(huì)造成重復(fù)比較,所以最好與最壞時(shí)間復(fù)雜度都是O(n^2)
            // 相對(duì)而言(對(duì)交換排序),冒泡排序優(yōu)于選擇排序
            int temp = arr[i];
            arr[i] = min;
            arr[index] = temp;
        }
        return arr;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容