初程面試中的那些事兒(4)

2021-09-11 19:29:28 字數 2027 閱讀 8437

哈露!小夥伴們!

又到了一天一次的葉子時間。廢話不多說。這次我將分享另乙個演算法

直接插入排序演算法;(從後向前找到合適位置後插入)

每步將乙個待排序的記錄,按其順序碼大小插入到前面已經排序的子串行的合適位置(從後向前找到合適的位置後),直到全部插入排序完為止。

這都是什麼東西!看完之後跟沒看一樣嘛!不過呢,沒關係!我們慢慢的分析。以下內容極易引起不適。非戰鬥人員請盡快離開!!!

好了正文開始:

顧名思義,插入排序就是拿後面往前插。這樣下面給出一組資料作為案例進行演示。

int arr = ;

//列舉出數字:16    4    10    19    95    24

/*首先從左往右看,拿第乙個數字作為基準數。這裡也就是16(arr[0]=16)下標是0

然後拿第二個數跟第乙個數進行比較。第二個數也就是4                 下標是1

這裡開始比較

第一輪 起始下標位置    i=1

記錄下下標位置=1的元素值    temp = 4(這個數是拿出來準備插入到前面的,需要提前儲存起來)

16    4    10    19    95    24

接下來就開始比較:因為 4 的前面只有乙個數 所以直接比較就可以,判斷 4 前面這個數比 4 大。

也就是 16>4 為 true 。那麼就將 16 這個數向後挪,得到的結果如下:

16    16    10    19    95    24

接下來需要判斷一下是否這個16是第乙個數:下標為0的元素

(注意這裡的判斷是乙個迴圈,因為第一次比只有乙個數所以看不出來是不是迴圈。繼續看!)

當判斷前面比較的元素就是第乙個元素時,將記錄下的元素賦值給比它大的元素。

即:arr[i-1]=temp;(這裡的i-1代表的是16這個元素的下標)

這樣看來第一輪就結束了。得到的結果為:

4    16    10    19    95    24

第二輪 起始下標位置    i=2

記錄下下標位置=2的元素值    temp = 10

這裡前面因為有兩個元素。理論上需要比較兩次(視情況而定!)

有兩種情況:

第一種10>16。這裡後續就不需要比較了,因為前面已經比較過了。

第二種情況10<16。這裡後續的就需要依次比較了。

直到出現類似第一種的情況就不需要比較了。

判斷之後得到的結果是10<16 但 10>4 這裡需要記錄16的下標位置(就是i-1),得到的結果就是:

4    16    16    19    95    24

然後判斷是否比完了。迴圈結束,賦值 arr[i-1] = temp;

4  10    16    19    95    24

第三輪 起始下標位置    i=3

記錄下下標位置=3的元素值    temp = 19

照例判斷 因為19>16後續的就不需要判斷了。也就不需要交換。得到的結果就是:

4    10    16    19    95    24

第四輪 起始下標位置    i=4

記錄下下標位置=4的元素值    temp = 95

照例判斷 因為95>19後續的就不需要判斷了。也就不需要交換。得到的結果就是:

4    10    16   19    95    24

第五輪 起始下標位置    i=5

記錄下下標位置=5的元素值    temp = 24

照例判斷 24>95為false 需要後續的判斷。記錄下前面大於24的元素的下標就是i-1

繼續判斷 24>19為true  後續的就不需要判斷了。得到的結果就是向後挪一下

4    10    16    19  95    95

賦值 arr[i-1] = temp;

4    10    16    19    24    95

*/for (int j = 1; j < arr.length; j++)

arr[i + 1] = tmp;

}我是葉子!非常感謝你能看見我的文章。如有披露請指出!

初程面試中的那些事兒(7)

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321示例 2 輸入 123 輸出 321示例 3 輸入 120 輸出 21注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數...

開發中Performance的那些事兒

效能 這個詞,不管是在日常生活還是寫程式的時候,都經常被提到。比方說,買新電腦的時候,我們會說 原來的電腦效能跟不上了 寫程式的時候,我們會說,這個程式效能需要優化一下 那麼,你有沒有想過,我們常常掛在嘴邊的 效能 到底指的是什麼呢?我們能不能給效能下乙個明確的定義,然後來進行準確的比較呢?在計算機...

Python那些事兒 Python中的生成器

python使用生成器對延遲操作提供了支援,所謂延遲操作,是指在需要的時候才產生結果,而不是立即產生結果。gen exp i for i in range 10 生成器表示式 print gen exp generator for i in gen exp 取出生成器表示式的值,for迴圈 prin...