排序第三記——選擇排序

選擇排序:Selection Sort

這次說(shuō)的是最簡(jiǎn)單的——選擇排序

為啥說(shuō)他最簡(jiǎn)單呢?額,難度和冒泡相比的話差不多吧,思想上比冒泡還能簡(jiǎn)單點(diǎn),我覺(jué)得如果讓一個(gè)完全沒(méi)有概念的人去想排序方法的話,那么這個(gè)人八成首先想到的就是選擇排序。

原理

選擇排序的原理很簡(jiǎn)單:
1.遍歷整個(gè)數(shù)組,找出最小的那個(gè)數(shù),并記下它的位置~
2.把它放在第一個(gè)位置上
3.遍歷數(shù)組,這次從第二個(gè)數(shù)開(kāi)始(因?yàn)榈谝粋€(gè)數(shù)已經(jīng)是最小的了),選出最小的數(shù),并記下其位置~
4.把它放在第二個(gè)位置上
......
重復(fù)上面的操作,直到最后一個(gè)數(shù)。

很簡(jiǎn)單吧~
實(shí)現(xiàn)起來(lái)應(yīng)該也不難,想必大家都可以手敲出來(lái):

/**
 * Created by AceCream on 2017/3/20.
 * 選擇排序(SelectionSort)
 * 通過(guò)選擇和交換來(lái)實(shí)現(xiàn)排序
 * 1.首先從原始數(shù)組中選擇最小的1個(gè)數(shù)據(jù),將其和位于第一個(gè)位置的數(shù)據(jù)交換。
 * 2.接著從剩下的n-1個(gè)數(shù)據(jù)中選擇里面最小的元素,和第二個(gè)位置數(shù)據(jù)進(jìn)行交換。
 * 3.不斷重復(fù)
 *
 * 時(shí)間復(fù)雜度: 平均:O(n^2)   最佳:O(n^2)   最壞:O(n^2)
 * 空間復(fù)雜度: O(1)
 * 穩(wěn)定性: 不穩(wěn)定
 *
 */
public class selectSort {
    public static void selectSort(int value[]){
        int index; //記錄位置
        int temp;
        for (int i=0;i<value.length;i++){
            index = i;
            //j=i+1 是為了不和自己比較,因?yàn)闆](méi)有意義
            for (int j=i+1;j<value.length;j++){
                if (value[j]<value[index]){
                    index = j;
                }
            }

            //判斷一下,如果是自己,就不要執(zhí)行下面的步驟了
            if (index!=i){
                temp = value[i];
                value[i] = value[index];
                value[index] = temp;
            }
        }
    }
    
    public static void main(String[] args) {
        int value[] = {12,15,9,20,6,31,24};
        selectSort(value);
        System.out.print("最終結(jié)果 ");
        for (int result : value) {
            System.out.print(result+" ");
        }
    }
}

這個(gè)很簡(jiǎn)單,但是簡(jiǎn)單要付出簡(jiǎn)單的代價(jià),代價(jià)就是時(shí)間復(fù)雜度實(shí)在的太高了,相比于其他排序,各項(xiàng)指標(biāo)都被完爆,恩,除了好寫。(選排:但是人家思想最簡(jiǎn)單~哼╭(╯^╰)╮)

堆排序:Heap Sort

顧名思義,是利用“堆”這種數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)出來(lái)的一種排序算法。
之前一直無(wú)法理解這種排序,結(jié)果發(fā)現(xiàn)是因?yàn)樽约簩?duì)堆概念的了解不足。(堆:“我當(dāng)然不是內(nèi)存模型里的堆,我是數(shù)據(jù)結(jié)構(gòu)里的堆,人家重名了?。?!重名!而已!”)

后續(xù)更新...

后記(可跳過(guò)不看)

普通人的思維是在最短時(shí)間內(nèi),找到能最簡(jiǎn)單的思路解決問(wèn)題的方式,也就是最好想的方式~但是想要成為優(yōu)秀的攻城獅,就需要鍛煉自己優(yōu)化解決問(wèn)題方式的能力,最短時(shí)間想到最優(yōu)解。同時(shí)還需要具備在后續(xù)給出優(yōu)化的可行方案!

最后編輯于
?著作權(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)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,297評(píng)論 0 52
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,818評(píng)論 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,347評(píng)論 0 2
  • 概述排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的...
    Luc_閱讀 2,370評(píng)論 0 35
  • 我覺(jué)得我是個(gè)糙漢子,女漢子已經(jīng)不足以形容我了……說(shuō)起來(lái),我自己也覺(jué)得自己是奇葩了。從不愛(ài)收拾自己,看著自己不臟不亂...
    樹(shù)皮醬閱讀 295評(píng)論 0 0

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