排序算法(二) 選擇排序

參考
Java排序算法(二):簡單選擇排序
數(shù)據(jù)結構和算法(Golang實現(xiàn))(20)排序算法-選擇排序

我打撲克牌的時候,會習慣性地從左到右掃描看靠,然后將最小的牌放在最左邊寄月,然后從第二張牌開始繼續(xù)從左到右掃描第二小的牌垮刹,放在最小的牌右邊瓢喉,以此反復。選擇排序和我玩撲克時的排序特別相似纹坐。

冒泡排序在不斷地交換归斤,而簡單排序只會在找到最小值時才交換痴荐,復雜度仍然是O(n2)

Paste_Image.png
// 在無序區(qū)中選出最小的元素扼仲,然后將它和無序區(qū)的第一個元素交換位置驳棱。
// 原理跟冒泡排序一樣,算是冒泡的衍生版本
function sort7(array) {
  var len = array.length,
  i, j, k, tmp, result;

  result = array.slice(0);
  for (i = 0; i < len; i++) {
    k = i;
    for (j = i + 1; j < len; j++) {
      if (result[j] < result[k]) k = j;
    }
    if (k != i) {
      tmp = result[k];
      result[k] = result[i];
      result[i] = tmp;
    }
  }
  return result;
}

[算法特點]
時間復雜度:需要進行1+2+3+...+(n-1)=n*(n-1)/2,復雜度為O(n^2)拴还。
該算法最大的特點就是交換移動數(shù)據(jù)次數(shù)相當少膝宁,這會節(jié)約相應的時間鸦难。分析它的時間復雜度你會發(fā)現(xiàn),無論最好最差的情況员淫,其比較次數(shù)都是一樣的多合蔽。
簡單選擇排序的性能上還是要略優(yōu)于冒泡排序。

選擇排序是一個不穩(wěn)定的排序算法介返,比如數(shù)組:[5 6 5 1]拴事,第一輪迭代時最小的數(shù)是1,那么與第一個元素5交換位置圣蝎,這樣數(shù)字1就和數(shù)字5交換了位置刃宵,導致兩個相同的數(shù)字5排序后位置變了。

package main

import "fmt"

func SelectSort(list []int) {
    n := len(list)
    // 進行 N-1 輪迭代
    for i := 0; i < n-1; i++ {
        // 每次從第 i 位開始徘公,找到最小的元素
        min := list[i] // 最小數(shù)
        minIndex := i  // 最小數(shù)的下標
        for j := i + 1; j < n; j++ {
            if list[j] < min {
                // 如果找到的數(shù)比上次的還小牲证,那么最小的數(shù)變?yōu)樗?                min = list[j]
                minIndex = j
            }
        }

        // 這一輪找到的最小數(shù)的下標不等于最開始的下標,交換元素
        if i != minIndex {
            list[i], list[minIndex] = list[minIndex], list[i]
        }
    }
}

func main() {
    list := []int{5, 9, 1, 6, 8, 14, 6, 49, 25, 4, 6, 3}
    SelectSort(list)
    fmt.Println(list)
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末关面,一起剝皮案震驚了整個濱河市坦袍,隨后出現(xiàn)的幾起案子十厢,更是在濱河造成了極大的恐慌,老刑警劉巖捂齐,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛮放,死亡現(xiàn)場離奇詭異,居然都是意外死亡奠宜,警方通過查閱死者的電腦和手機筛武,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挎塌,“玉大人,你說我怎么就攤上這事内边×穸迹” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵漠其,是天一觀的道長嘴高。 經常有香客問我,道長和屎,這世上最難降的妖魔是什么拴驮? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮柴信,結果婚禮上套啤,老公的妹妹穿的比我還像新娘。我一直安慰自己随常,他們只是感情好潜沦,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绪氛,像睡著了一般唆鸡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枣察,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天争占,我揣著相機與錄音,去河邊找鬼序目。 笑死臂痕,一個胖子當著我的面吹牛,可吹牛的內容都是我干的猿涨。 我是一名探鬼主播刻蟹,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嘿辟!你這毒婦竟也來了舆瘪?” 一聲冷哼從身側響起片效,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎英古,沒想到半個月后淀衣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡召调,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年膨桥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唠叛。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡只嚣,死狀恐怖,靈堂內的尸體忽然破棺而出艺沼,到底是詐尸還是另有隱情册舞,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布障般,位于F島的核電站调鲸,受9級特大地震影響,放射性物質發(fā)生泄漏挽荡。R本人自食惡果不足惜藐石,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望定拟。 院中可真熱鬧于微,春花似錦、人聲如沸青自。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽性穿。三九已至勺三,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間需曾,已是汗流浹背吗坚。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留呆万,地道東北人商源。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像谋减,于是被迫代替她去往敵國和親牡彻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內容

  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好...
    依依玖玥閱讀 1,262評論 0 2
  • 對于初學者缎除,我推薦用復利的例子來理解卷積可能更直觀一些: 小明存入100元錢,年利率是5%总寻,按復利計算(即將每一年...
    Victorsun閱讀 12,887評論 1 7
  • 一器罐、 安裝前準備 打開終端(用普通用戶進入終端,不要用超級用戶)渐行。 sudo apt-get update sud...
    3c937c88e6c0閱讀 852評論 0 1
  • 在近段工作過程中轰坊,碰到過不少問題,當碰到問題后祟印,我對該問題最開始的思考和后面的思考是不一樣的肴沫! 我舉2個例子吧: ...
    這是個非常帥氣的昵稱呢閱讀 318評論 0 1
  • 照耀現(xiàn)在的明燈 當過去幫助你留意到現(xiàn)在發(fā)生的事情時 過去就成為一盞明燈 ———維吉尼亞.薩提亞 維吉尼亞.薩提亞是...
    帥帥的溫柔閱讀 453評論 2 3