重溫算法之選擇排序

選擇排序原理 每一趟從待排序的記錄中選出最小的元素汉买,順序放在已排好序的序列最后,直到全部記錄排序完畢伟件。也就是:每一趟在n-i+1(i=1戈毒,2艰猬,…n-1)個記錄中選取關(guān)鍵字最小的記錄作為有序序列中第i個記錄÷袷校基于此思想的算法主要有簡單選擇排序冠桃、樹型選擇排序和堆排序。(這里只介紹常用的簡單選擇排序)

  • 簡單選擇排序的基本思想:給定數(shù)組:int[] arr={里面n個數(shù)據(jù)}道宅;第1趟排序食听,在待排序數(shù)據(jù)arr[1]arr[n]中選出最小的數(shù)據(jù)胸蛛,將它與arrr[1]交換;第2趟樱报,在待排序數(shù)據(jù)arr[2]arr[n]中選出最小的數(shù)據(jù)葬项,將它與r[2]交換;以此類推迹蛤,第i趟在待排序數(shù)據(jù)arr[i]~arr[n]中選出最小的數(shù)據(jù)民珍,將它與r[i]交換,直到全部排序完成盗飒。

  • 舉例:數(shù)組 int[] arr={5,2,8,4,9,1};


第一趟排序: 原始數(shù)據(jù):5 2 8 4 9 1

最小數(shù)據(jù)1穷缤,把1放在首位,也就是1和5互換位置箩兽,

排序結(jié)果:1 2 8 4 9 5


第二趟排序:

第1以外的數(shù)據(jù){2 8 4 9 5}進行比較,2最小章喉,

排序結(jié)果:1 2 8 4 9 5


第三趟排序:

除1汗贫、2以外的數(shù)據(jù){8 4 9 5}進行比較,4最小秸脱,8和4交換

排序結(jié)果:1 2 4 8 9 5


第四趟排序:

除第1落包、2、4以外的其他數(shù)據(jù){8 9 5}進行比較摊唇,5最小咐蝇,8和5交換

排序結(jié)果:1 2 4 5 9 8


第五趟排序:

除第1、2巷查、4有序、5以外的其他數(shù)據(jù){9 8}進行比較,8最小岛请,8和9交換

排序結(jié)果:1 2 4 5 8 9


注:每一趟排序獲得最小數(shù)的方法:for循環(huán)進行比較旭寿,定義一個第三個變量temp,首先前兩個數(shù)比較崇败,把較小的數(shù)放在temp中盅称,然后用temp再去跟剩下的數(shù)據(jù)比較,如果出現(xiàn)比temp小的數(shù)據(jù)后室,就用它代替temp中原有的數(shù)據(jù)缩膝。具體參照后面的代碼示例,相信你在學排序之前已經(jīng)學過for循環(huán)語句了岸霹,這樣的話疾层,這里理解起來就特別容易了。

代碼實例

    public class SelectionSort {
    public static void main(String[] args) {
        int[] arr={1,3,2,45,65,33,12};
        System.out.println("交換之前:");
        for(int num:arr){
            System.out.print(num+" ");
        }        
        //選擇排序的優(yōu)化
        for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
            int k = i;
            for(int j = k + 1; j < arr.length; j++){// 選最小的記錄
                if(arr[j] < arr[k]){ 
                    k = j; //記下目前找到的最小值所在的位置
                }
            }
            //在內(nèi)層循環(huán)結(jié)束贡避,也就是找到本輪循環(huán)的最小的數(shù)以后云芦,再進行交換
            if(i != k){  //交換a[i]和a[k]
                int temp = arr[i];
                arr[i] = arr[k];
                arr[k] = temp;
            }    
        }
        System.out.println();
        System.out.println("交換后:");
        for(int num:arr){
            System.out.print(num+" ");
        }
    }

運行結(jié)果

Paste_Image.png

選擇排序的時間復雜度:簡單選擇排序的比較次數(shù)與序列的初始排序無關(guān)俯逾。 假設(shè)待排序的序列有 N 個元素,則比較次數(shù)永遠都是N (N - 1) / 2舅逸。而移動次數(shù)與序列的初始排序有關(guān)桌肴。當序列正序時,移動次數(shù)最少琉历,為 0坠七。當序列反序時,移動次數(shù)最多旗笔,為3N (N - 1) / 2彪置。所以,綜上蝇恶,簡單排序的時間復雜度為 O(N2)拳魁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市撮弧,隨后出現(xiàn)的幾起案子潘懊,更是在濱河造成了極大的恐慌,老刑警劉巖贿衍,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件授舟,死亡現(xiàn)場離奇詭異,居然都是意外死亡贸辈,警方通過查閱死者的電腦和手機释树,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來擎淤,“玉大人奢啥,你說我怎么就攤上這事∽炻#” “怎么了扫尺?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵炊汤,是天一觀的道長正驻。 經(jīng)常有香客問我,道長抢腐,這世上最難降的妖魔是什么姑曙? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮迈倍,結(jié)果婚禮上伤靠,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好宴合,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布焕梅。 她就那樣靜靜地躺著,像睡著了一般卦洽。 火紅的嫁衣襯著肌膚如雪贞言。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天阀蒂,我揣著相機與錄音该窗,去河邊找鬼。 笑死蚤霞,一個胖子當著我的面吹牛酗失,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昧绣,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼规肴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了夜畴?” 一聲冷哼從身側(cè)響起拖刃,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斩启,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體醉锅,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡兔簇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了硬耍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垄琐。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖经柴,靈堂內(nèi)的尸體忽然破棺而出狸窘,到底是詐尸還是另有隱情,我是刑警寧澤坯认,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布翻擒,位于F島的核電站,受9級特大地震影響牛哺,放射性物質(zhì)發(fā)生泄漏陋气。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一引润、第九天 我趴在偏房一處隱蔽的房頂上張望巩趁。 院中可真熱鬧,春花似錦淳附、人聲如沸议慰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽别凹。三九已至草讶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間番川,已是汗流浹背到涂。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颁督,地道東北人践啄。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像沉御,于是被迫代替她去往敵國和親屿讽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容