原创 排序算法06:快速排序

算法介紹   快速排序是一種分治的排序算法。排序邏輯爲:先挑一個元素來切分數組,最終讓該元素的左側都小於該元素,右側的所有元素都大於該元素。遞歸的讓左側和右側分別執行該操作,最終讓整個數組變得有序。 快速排序示意圖:   咋眼一

原创 【雞湯第1期】從心所欲而不逾矩

從心所欲而不逾矩 憑藉一己之力,用100多個短視頻,就獲得了CNN積40年之功力才能在海外社交媒體上收割到的流量(訂閱量700萬+) 再次印證精品依然是營銷的利器。曾經被問到技術基礎建設怎麼向其他團隊推廣,答案就是把他做成

原创 排序算法02:選擇排序

算法介紹   首先,從[0,len]中找到數組中最小的元素,讓它與第一個元素交換。接着從[1,len]中找出最小的元素,讓它與第二個元素交換。循環往復,最終使得數組從小到大排序。 可視化效果:這裏 Javascript實現 /**

原创 排序算法05:歸併排序

算法介紹   歸併排序的算法邏輯爲把兩個有序的數組歸併爲一個有序的數組。 舉個例子,對於一個長度爲8的數組,有兩種歸併方式 自頂向下的歸併: 1. 先分爲[0-3],[4-7],左右有序後再歸併到一起就變成一個完整的有序數組了

原创 排序算法01:冒泡排序

算法介紹 步驟: 1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 2. 對第0個到第n-1個數據做同樣的工作。這時,最大的數就“浮”到了數組最後的位置上。 3. 針對所有的元素重複以上的步驟,除了

原创 排序算法07:三向快速排序

算法介紹   在上一篇排序算法06:快速排序中,可以知道,快速排序不停的遞歸切分數組。在有大量的重複元素情況下,這樣的切分存在巨大的改進空間。三向切分的快速排序就是爲了提升在有大量重複元素情況下快速排序的性能。   快速排序把數組

原创 排序算法08:優先隊列與堆排序

  堆排序一種是基於二叉堆的排序。本文將從優先隊列講起,循序漸進的實現堆排序。這也是《算法》第四版上講解堆排序的大致章節結構。另外,本文所有的圖都來自於此書。 優先隊列   普通隊列是一種先進先出的數據結構,先放進隊列的元素取值時

原创 排序算法03:插入排序

算法介紹 步驟: 1. 從第一個元素開始,該元素可以認爲已經被排序 2. 取出下一個元素,在已經排序的元素序列中從後向前掃描 3. 如果被掃描的元素(已排序)大於新元素,將該元素後移一位 4. 重複步驟3

原创 年終總結攻略,再也不愁如何下筆了!

目的 如果不明白一件事的目的與價值,那麼就不會有做下去的動力。 生活部分:時光記錄機 工作部分:讓你的leader知道你有哪些不滿意,新的一年有哪些想法和預期,好做針對性改善與調整 不會總結與規劃,就不知道有哪些不足,就不

原创 排序算法04:希爾排序

算法介紹   從上一篇《插入排序》可以知道,當最小元素恰好在最後一個時,需要移動的次數爲N-1。當一個從大到小排列的數組使用插入排序變成從小到大排列時,需要比亂序狀態下耗費更多的時間。原因爲插入排序是從後往前一位一位的往前交換,如

原创 【雞湯第2期】不要追求完美,要隨心所欲地生活

關於完美主義 簡單說,完美主義就是追求一個較高水平的目標,不接受一個較低水平的、但可用的結果。 完美主義的最大問題是,它實際上讓你追求高成本。 完美主義帶來的高壓力,也不利於身心健康。不要追求完美,要隨心所欲地生活。 來源:

原创 前端防抖與節流

  函數防抖與節流印象中都是爲了控制函數執行頻率,比如避快速點擊提交按鈕多次提交、避免模糊搜索框keyup事件監聽時快速打字每次都去調用一次查詢接口、避免頁面滾動監聽事件快速執行影響性能等;之前對防抖和節流的具體概念缺乏瞭解,比如

原创 你是否也默默吐槽過XXX的代碼寫得真爛?

  前段時間在做前端監控代碼的交接,交接之前對代碼質量有點憂慮(實際上也沒有想象的那麼差… - _ - )   憂慮的原因是什麼呢,曾經做一線開發時,用到公司基礎框架組提供的框架時,當大家覺得不好用或者翻看源代碼發現代碼質量不高

原创 手寫JS函數的call、apply、bind實現

  之所以要寫這篇,是因爲曾經面試被要求在白紙上手寫bind實現   結果跟代碼一樣清晰明確,一陣懵逼,沒寫出來!   下面,擼起袖子就是幹!~   把call、apply、bind一條龍都整一遍!~~ call 定義與使用

原创 CodeReview過程中關於JS代碼性能的隨想整理

原文地址:CodeReview過程中關於JS代碼性能的隨想整理 問題   團隊中做code review有一段時間了,最近一直在思考一個問題,拋開業務邏輯,單純從代碼層面如何評價一段代碼的好壞?   好和壞都是相對的,一段不那麼好的代