每日一演算法1

2021-09-24 02:00:48 字數 993 閱讀 4425

@插入排序

首先來解釋一下插入排序法的原理:

它的原理是每插入乙個數都要將它和之前的已經完成排序的序列進行重新排序,也就是要找到新插入的數對應原序列中的位置。那麼也就是說,每次插入乙個數都要對原來排序好的那部分序列進行重新的排序,時間複雜度同樣為o(n²)。 這種演算法是穩定的排序方法。

下面我用乙個圖來解釋一下

首先這是乙個未經排序的陣列:

我們要做的從a[1]開始,至於為什麼不是a[0]。a[0]之前沒有與a[0]進行比較的元素。我們插入a[1],這個時候我們需要遍歷a[1]和a[1]之前的所有元素進行比較。這個時候我們需要設定乙個變數j,用來記錄第乙個 比 a[1]元素小的那個元素的下標,也就是a[1]要插入的位置,這個時候跳出迴圈,並且每發現乙個比a[1]大的元素,就要令這個元素後移一位。依次類推的演算法直到整個陣列的最後乙個。

以a[4]為例,假設a[3] (注意,這個地方,從a[0]到a[3]已經完成了排序)小於 a[4] ,那麼就j的值是 3

那麼這個時候 a[4] 就應該放在 下標是3+1 = 4的位置處

先附上**:

//(ts)

public static insertsort(arr:array)

//將新元素插入到已排序序列中

arr[j] = val;} }

驗證結果:

排序前:

[5,9,3,8,4,1,4,8,6,10,32,12];
排序後:

[1, 3, 4, 4, 5, 6, 8, 8, 9, 10, 12, 32]
好了,這就是插入演算法了,缺點就是時間消耗會非常大。

每日一演算法

leetcode 75 號題 給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,...

每日一演算法

答主大二,這學期剛開了資料結構與演算法的課程,但課堂上只提及基礎的增刪改查,遠遠不能滿足對資料結構相對熟悉的需求,因而答主便有了 每日演算法 專題練習的想法,有需要的可以共同練習,與君共勉 適用人群 資料結構與演算法初學者 題型大多來自leetcode 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 ...

每日一演算法 A B Problem

描述give you two numbers a and b,how to know the a b s the last digit number.it looks so easy,but everybody is too lazy to slove this problem,so they re...