大牛領導單獨找我聊了兩句 搞框架的同時別忘了演算法

2022-07-12 18:45:16 字數 2362 閱讀 8490

程式=資料結構+演算法,好的演算法能讓程式更高效的執行;在當今資料資訊時代,資料分析和資料處理肯定是避免不了,而演算法便成為了很多公司門檻級的要求,特別是大廠;

趕緊搞起來,說不定離進大廠就只差一步呢(演算法)~~~

演算法是一組完成任務的指令,任何**片段都可視為演算法。如下:

1. 演算法五大特性

乙個好的演算法還應該有如下特徵:

2. 衡量演算法好壞的標準

度量乙個演算法好壞,可以從兩個維度進行判斷:

對於時間複雜度和空間複雜度,對應的數量級別越小,演算法越高效。常遇到到級別從好到差的順序如下:

o(1)2 n)2 n)2)3)n)n)

3. 演算法的穩定性

若待排序資料中有兩個相等的元素a和b,在排序前a在b前面,如果使用某種排序演算法後,a仍在b前面,則稱這種排序演算法穩定,否則就不穩定。但穩定性不能用來衡量乙個演算法的好壞,只能算是演算法的乙個性質,對於一些場景,根本就不在乎兩個相等元素的順序。

排序在實際開發中用的比較多,就先從這入手吧;排序分為內部排序和外部排序兩種:

1. 先來說說直接插入排序

1.1 演算法思想

插入排序就是每次將乙個待排序的資料插入到乙個前面已排好序的子串行中,初始認為第乙個元素就是排好序的序列,依次比較,然後插入到合適位置,直到完成排序為止。

插入排序的關鍵如下:

1.2 演算法實現與解析

演算法**如下(公升序):

執行結果如下:

解析排序步驟過程,如下:

步驟說明:

圖中綠線框部分代表是已經排好序的列表,箭頭指的元素是下乙個要插入的元素,黃線框部分為剩下的無序元素。黃方塊為每次移動的資料,綠方塊表示最後有序列表騰出的位置。

第5步完成之後,已完成黃線框中無序元素的排序,排序也就完成啦;最終的結果就是1、2 、3 、5 、6 、9。

這樣對比著圖看詳細說明,是不是好理解了很多。

如果有小夥伴不太理解上面的**,可以使用定義臨時變數作為哨兵的方式,步驟和上面基本一樣,只是哨兵不一樣,如下:

1.3 演算法分析

主要從時間複雜度、空間複雜度、是否穩定來進行分析:

時間複雜度

分析時間複雜度時,會從最好、平均、最壞三種情況進行分析;

最好時間複雜度:傳入的資料是有序的(和最終的結果一致),所以每次遍歷,一次就能找到位置,所以插入排序的最好時間複雜度為o(n),和傳入的元素個數有關;

最壞時間複雜度:傳入的資料完全和要的結果相反,所以每次都需要進行兩次迴圈進行找到合適位置插入,所以最壞時間複雜度為o(n2);

平均時間複雜度也就是:o(n2);

空間複雜度

在演算法核心部分只採用了固定的幾個中間變數(i,j,arrayb[0]),所以演算法過程中消耗的記憶體是乙個常量,則空間複雜度為o(1);

穩定性

由於在演算法過程中採用的是小於符號進行比較,遇見相等的資料時就終止判斷,所以不會影響原有的資料順序,則直接插入排序是穩定的。

綜上所述,插入排序的時間複雜度為o(n2),空間複雜度為o(1),是穩定演算法;

第一篇複習了一下關於演算法相關知識,然後以簡單的直接插入排序收尾,後面會依次總結其他演算法,還是**加說明的方式,讓每乙個算法學起來更簡單。

乙個被程式搞醜的帥小伙,關注"code綜藝圈",跟我一起學~~~

假裝我是大牛直到我成為大牛

fake it till you make it.這是一句西方諺語,意思是說假裝自己是,直到自己成為。這句諺語,其實背後是有心理學理論來支撐的。假裝自己是這個人,像這個人這樣思考,這樣決策,這樣說話,這樣做事。那麼,像安安老師曾經教會我的,我就已經活在目標裡了,這種狀態叫being的狀態。而把成為乙...

大牛部落格收藏

1 android開發教程 簽名與發布應用程式 2 android viewpager使用詳解 4 android 解析json資料格式 5 android json解析及簡單例子 8 android service學習之aidl,parcelable和遠端服務 9 android的intent之間...

接連遇到大牛

從那個考研失敗的陰影中走出來,我回首,才知考不考研無所謂,只要你與優秀大牛們在一起。而考研會讓你錯過很多實戰的機會,又或者繼續與菜鳥們在一起。乙個人有信仰,不服輸,這個人不是在成功,就是走在了成功的路上,天道酬勤有時會讓我們迷茫,付出了為什麼沒有收穫,但是你有沒有問過自己,自己真的付出了嗎,風雨哈佛...