排序算法之插入排序睬捶,玩撲克牌必會(huì)

本文將介紹排序算法中的插入排序,包括:插入排序?qū)嵗酰a解析擒贸,效率分析臀晃。

1 插入排序?qū)嵗?/h2>

今天來學(xué)習(xí)插入排序,在講插入排序之前酗宋,我們先來講一講撲克牌积仗。每個(gè)人都會(huì)打撲克牌,不知道你們有沒有注意到蜕猫,我們?cè)谀门频臅r(shí)候寂曹,會(huì)習(xí)慣性地把手上的牌按照從小到大排好。這樣我們?cè)诔雠频臅r(shí)候才不會(huì)手忙腳亂回右。當(dāng)你的小伙伴正在發(fā)牌的時(shí)候隆圆,如果你習(xí)慣發(fā)一張拿一張,你可能會(huì)無意中用到插入排序來完成你的摸牌翔烁。

首先渺氧,拿到第一張牌,此時(shí)不用做任何操作蹬屹。

拿到第二張牌之后侣背,如果比原來的小,就放在左邊慨默,如果比原來的大贩耐,就放在右邊。

拿到第三張牌之后厦取,就找到右邊比這張牌大潮太,左邊比這張牌小的地方插進(jìn)去

拿到第四張虾攻,第五張……第n張铡买,都是如此。

如果以上是你拿到牌之后的做法霎箍,那你已經(jīng)學(xué)會(huì)了插入排序奇钞,并且在無意中運(yùn)用到了打牌之中。

插入排序的基本思想漂坏,就是每一步將一個(gè)待排序的元素蛇券,插入到前面已經(jīng)排好序的有序序列中,直到所有元素都插入完畢為止樊拓。

是不是跟上面摸牌的過程很像呢纠亚?來看一下插入排序的例子:

image

默認(rèn)第一張牌是有序的,因此插入排序只需要排n-1趟筋夏。

第一趟蒂胞,把5插入到有序序列[4]中,得到[4,5]条篷。

第二趟骗随,把1插入有序序列[4,5]中蛤织,得到[1,4,5]。

第三趟鸿染,把10插入有序序列[1,4,5]中指蚜,得到[1,4,5,10]。

最后一趟涨椒,把3插入有序序列[1,4,5,10]中摊鸡,得到最終的[1,3,4,5,10]。

2 代碼解析

image

14行:插入排序需要n-1趟,從下標(biāo)i=1開始遍歷

15-22行:變量j初始化為當(dāng)前待插入元素i蚕冬,并設(shè)置變量temp存儲(chǔ)我們待插入的元素卖词。從后往前找陵霉,如果前一個(gè)元素j-1比j大私蕾,讓前一個(gè)元素往后移穆役,覆蓋j的值,并且j自身減1旁蔼。直到j(luò)<=0(所有元素都比待插入元素大锨苏,此時(shí)插入到開頭位置),或者a[j]大于等于a[j-1] (j已經(jīng)到了它應(yīng)該插入的位置棺聊,再往前就不是有序數(shù)組了)伞租。跳出wihle循環(huán)后,j已經(jīng)到達(dá)它要插入的位置躺屁,讓a[j]=temp;即可肯夏。

3 效率分析

注意到如果正確的插入位置在中間经宏,需要把它右邊所有的元素后移一個(gè)位置犀暑,再把元素插入。最差情況下烁兰,如果是把一個(gè)降序序列排成升序耐亏,比如[10,9,8,7,6],則每次插入元素的位置都是在開頭沪斟,每次都需要移動(dòng)整個(gè)有序數(shù)組广辰。其時(shí)間復(fù)雜度為O(n^2)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末主之,一起剝皮案震驚了整個(gè)濱河市择吊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌槽奕,老刑警劉巖几睛,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異粤攒,居然都是意外死亡所森,警方通過查閱死者的電腦和手機(jī)囱持,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來焕济,“玉大人纷妆,你說我怎么就攤上這事∏缙” “怎么了掩幢?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)肝匆。 經(jīng)常有香客問我粒蜈,道長(zhǎng),這世上最難降的妖魔是什么旗国? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任枯怖,我火速辦了婚禮,結(jié)果婚禮上能曾,老公的妹妹穿的比我還像新娘度硝。我一直安慰自己,他們只是感情好寿冕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布蕊程。 她就那樣靜靜地躺著,像睡著了一般驼唱。 火紅的嫁衣襯著肌膚如雪藻茂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天玫恳,我揣著相機(jī)與錄音辨赐,去河邊找鬼。 笑死京办,一個(gè)胖子當(dāng)著我的面吹牛掀序,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惭婿,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼不恭,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了财饥?” 一聲冷哼從身側(cè)響起换吧,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钥星,沒想到半個(gè)月后沾瓦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年暴拄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漓滔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乖篷,死狀恐怖响驴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撕蔼,我是刑警寧澤豁鲤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站鲸沮,受9級(jí)特大地震影響琳骡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讼溺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一楣号、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怒坯,春花似錦炫狱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至归敬,卻和暖如春酷含,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汪茧。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國打工椅亚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陆爽。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓什往,卻偏偏與公主長(zhǎng)得像扳缕,于是被迫代替她去往敵國和親慌闭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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

  • 概述 排序有內(nèi)部排序和外部排序躯舔,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序驴剔,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,190評(píng)論 0 52
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,262評(píng)論 0 2
  • 概述 排序有內(nèi)部排序和外部排序粥庄,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序丧失,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    zwb_jianshu閱讀 1,156評(píng)論 0 0
  • 排序的基本概念 在計(jì)算機(jī)程序開發(fā)過程中惜互,經(jīng)常需要一組數(shù)據(jù)元素(或記錄)按某個(gè)關(guān)鍵字進(jìn)行排序布讹,排序完成的序列可用于快...
    Jack921閱讀 1,435評(píng)論 1 4
  • 這本書是我在懷孕時(shí)買的琳拭,一直放在書架上,沒有仔細(xì)的看描验,這次拿出來從頭仔細(xì)的閱讀了一遍白嘁,收獲頗多。 ...
    盡心閱讀 242評(píng)論 0 0