小白都能玩的演算法day6 插入排序

2021-09-11 14:40:32 字數 1679 閱讀 4015

小白講故事,每日都精彩

今日小白將要談談社會現象「插隊」。

之前看了乙個抖音(小白可不是抖音控)。乙個小伙紙插隊到小姐姐面前,小姐姐拍拍他的肩膀說:「我們熟嗎?」。小夥子:「不熟」。小姐姐一腳把小夥子踢開,「不熟,尼瑪插什麼隊」!

小白想告訴那哥們,「來跟小白學習插隊的正確方式---插入排序

假設前面站了一排有序的美女(牌),如何才能接近我們心意的妹子面前呢(要插入的物件)?

那還不簡單,直接上去跟妹子說:「妹子,哥看上你了,跟哥回家吧」!

小白多年愛情失敗的經驗總結出兩個字:「套路」!(套路得人心,小白說的)

話不多說,直接看我們如何把問題抽象。

function insert(a, x)

a: 已排序的陣列

x: 要插入的元素

複製**

我們先想一版最暴力最直接的寫法

function insert(a, x)else

}複製**

這好比第乙個哥們追女孩子的方式.既然小白說了套路得人心,我們就設計一套可優化的方案。

之前我們用過迴圈不變式,這是我們乙個重要思想。 假設p是我們要比較的位置,p+1是是我們騰出來的空位置,那麼就如下圖。

**部分:

/**

* @description insert

* @params arr 插入陣列

* @params i 空位座標

* @params x 插入物件

*/function insert(arr, i, x)

arr[p+1] = x;

}複製**

來看看我們完整插入排序實現方式:

function insert(arr, i, x)

arr[p+1] = x;

}function insertion_sort(a)

}複製**

話說長得好看的小哥哥,可能一次就能插隊成功。(最好的情況)

俗話魅力不足,就腳踏實地,死皮賴臉的一次又一次的粘。(最壞情況)

上面說過最好的情況是1次排序成功,從時間複雜度上說是個常數o(c)。

最壞的情況在於insert的內迴圈,關鍵取決於i的次數,所以1+2+3+...+n,其他的都是常數。最終得出應該o(n*n)。

最終結果介於o(c)和o(n*n)中間。這個之後會介紹演算法的好壞程度。如不懂之後,先略過

1

3 5

7 9 11

13 15 17 19

21 23 25 27 29

複製**

寫乙個函式,給定行的序號,然後求和:

rowsumoddnumbers(1) // 1

rowsumoddnumbers(2) // 3+5=8

rowsumoddnumbers(3) // 7+9+11=27

rowsumoddnumbers(42) // 74088

複製**

小白都能玩的演算法day1 演算法基礎概念

小白講故事,每日都精彩。今日小白給大家帶來乙個,熊孩子稱大象的故事 三國時期,孫權不知從 弄來乙隻大象。曹操看了之後,他就想稱一稱大象的重量。群臣一看,尼瑪這麼大只大象,就算用盡 的力氣,也撼不動 v 正在大家束手無策的時候,乙個叫曹沖的熊孩子站了出來。來看看熊孩子的思路 首先把大象趕到船上 在船的...

小白都能玩的演算法day4 演算法依賴的數學模型

小白講故事,每天都精彩。今天小白給大家帶來的是cup和記憶體的結構,幫助大家理解以後學習演算法和分析效能這些。閒話少說直接放大招。小白最近老是丟三落四的,上一瞬記得要做的事,過一會就忘了。是不是忘了喝六個核桃補補腦了。噴一口老血!短期記憶可以模擬成暫存器 暫時儲存 人的邏輯推理相當於算術邏輯單元 計...

演算法題Day6 有效的括號

給定乙個只包含 的字串,判斷字串是否有效。有效字串需滿足 1.左括號必須用相同型別的右括號閉合 2.左括號必須以正確的順序閉合 空字串可以被認定為有效字串 示例一 輸入 輸出 true示例二 輸入 輸出 true示例三 輸入 輸出 false示例四 輸入 輸出 false示例五 輸入 輸出 true...