選擇排序

一 概述
設(shè)所排序序列的記錄個(gè)數(shù)為n,i 取 1,2,…,n-1 。   從所有n-i+1個(gè)記錄(Ri,Ri+1,…,Rn)中找出排序碼最小(或最大)的記錄,與第i個(gè)記錄交換。執(zhí)行n-1趟 后就完成了記錄序列的排序。

二 性能分析
在簡(jiǎn)單選擇排序過(guò)程中,所需移動(dòng)記錄的次數(shù)比較少。
最好情況下,即待排序記錄初始狀態(tài)就已經(jīng)是正序排列了,則不需要移動(dòng)記錄?!?  
最壞情況下,即待排序記錄初始狀態(tài)是按第一條記錄最大,之后的記錄從小到大順序排列,則需要移動(dòng)記錄的次數(shù)最多為3(n-1)。

簡(jiǎn)單選擇排序過(guò)程中需要進(jìn)行的比較次數(shù)與初始狀態(tài)下待排序的記錄序列的排列情況無(wú)關(guān)。   
當(dāng)i=1時(shí),需進(jìn)行n-1次比較;
當(dāng)i=2時(shí),需進(jìn)行n-2次比較;
依次類推,共需要進(jìn)行的比較次數(shù)是(n-1)+(n-2)+…+2+1=n(n-1)/2,即進(jìn)行比較操作的時(shí)間復(fù)雜度為O(n^2),進(jìn)行移動(dòng)操作的時(shí)間復(fù)雜度為O(n)。

簡(jiǎn)單選擇排序是不穩(wěn)定排序。

三 程序?qū)嵺`
以排序數(shù)組{3,2,1,4,6,5}為例

static int selectSort(int[] a, int length){
        if (a == null || length <= 1){
            return -1;
        }

        if (length > a.length){
            return -1;
        }

        for (int i = 0; i < length; i++){
            int min = a[i];
            int index = 0;
            for (int j = i + 1; j < length; j++){
                if (a[j] < min){
                    min = a[j];
                    index = j;
                }
            }

            if (index > 0){
                int tmp = a[i];
                a[i] = a[index];
                a[index] = tmp;
            }
        }


        return 0;
    }

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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