小白講故事,每日都精彩今日小白將要談談社會現象「插隊」。
之前看了乙個抖音(小白可不是抖音控)。乙個小伙紙插隊到小姐姐面前,小姐姐拍拍他的肩膀說:「我們熟嗎?」。小夥子:「不熟」。小姐姐一腳把小夥子踢開,「不熟,尼瑪插什麼隊」!
小白想告訴那哥們,「來跟小白學習插隊的正確方式---插入排序」
假設前面站了一排有序的美女(牌),如何才能接近我們心意的妹子面前呢(要插入的物件)?
那還不簡單,直接上去跟妹子說:「妹子,哥看上你了,跟哥回家吧」!
小白多年愛情失敗的經驗總結出兩個字:「套路」!(套路得人心,小白說的)
話不多說,直接看我們如何把問題抽象。
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...