選擇排序

選擇排序的本質(zhì)就是篩查列表中的最小值,然后進(jìn)行數(shù)據(jù)元素的交換。
選擇排序也是需要將列表分為已排序和未排序兩部分,我們每次對未排序的部分進(jìn)行篩查找到其中的最小值然后添加的已排序部分。我們默認(rèn)取列表的左邊部分為已排序部分,右邊部分為列表的未排序部分,已排序和未排序的關(guān)系是已排序部分增加的下標(biāo)是未排序部分的起始下標(biāo)(具體提現(xiàn)即:當(dāng)從未排序部分篩查出最小值之后需要將這個元素與未排序部分的起始元素進(jìn)行交換,這樣隨著下次進(jìn)行選擇操作時未排序起始位置下標(biāo)的增加,篩查出來的元素就自動劃分給了已排序部分)。默認(rèn)情況下列表的已排序部分為0,未排序部分占據(jù)整個列表。接下來我們看一下具體的實現(xiàn):

package com.lijianjian.test;

public class SelectSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] ar = { 9, 12, 3, 45, 11, 2 };
        selectSort(ar);
        for (int i = 0; i < ar.length; i++) {
            System.out.println("i value is =" + ar[i]);
        }
    }

    /**
     * 選擇排序的原理是將列表分為未排序和已排序部分 每次從未排序部分中獲取最小值(或者最大值)放入已排序部分中
     * 需要知道未排序的第一個下標(biāo)和當(dāng)前選擇操作中未排序部分最小值的下標(biāo) 將兩個元素的值互換
     * 
     * 我們選則將列表的前面部分劃為已排序部分
     */
    private static void selectSort(int[] array) {
        int minIndex = 0;// 標(biāo)識未排序部分的最小值的下標(biāo) 默認(rèn)取未排序列表的第一個元素,后續(xù)的選擇操作會覆蓋掉這個值
        
        for (int i = 1; i < array.length; i++) {
            // 外層循環(huán)用來限制執(zhí)行選擇操作的次數(shù),i代表第幾次執(zhí)行選擇操作(i-1代表著未排序部分的起始下標(biāo))
            // i<array.length表示最多可以執(zhí)行(array.length-1)次選擇操作(當(dāng)只剩下一個元素的時候是不用進(jìn)行排序的)
            
            minIndex=i-1;
            for (int j = i; j < array.length; j++) {
                // 內(nèi)層循環(huán) 執(zhí)行選擇操作 從未排序的部分中選出最小值
                if (array[minIndex] > array[j]) {
                    minIndex = j;
                }
            }

            // 將篩選出來的最小值添加進(jìn)已排序部分
            if (minIndex >= i) {
                array[minIndex] = array[minIndex] + array[i - 1];
                array[i - 1] = array[minIndex] - array[i - 1];
                array[minIndex] = array[minIndex] - array[i - 1];
            }
        }
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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