演算法 排序 插入

2021-07-25 02:47:59 字數 1273 閱讀 3731

插入排序的思想跟選擇排序類似,都是從後面選擇元素往前面「放」,導致這兩種演算法經常」傻傻分不清楚」。筆者認為它們兩個最大的區別已經體現在「放」的策略上。

假設現有無序陣列a0到a5處在,它們分別對應著陣列中的0到5號位。要求實現從小到大排列。

所謂的選擇排序,它側重從a0到a5中選出最小的乙個元素,放到0號位上;然後在剩餘元素中選出次小元素,放在1號位上,依次類推…

而插入排序,它裡面引入了分組的概念,核心是把陣列分為有序和無序的兩部分,然後將無序的元素依次插入到有序序列中。先將陣列分成a0、a1-a5兩部分,a0是有序的(為啥,乙個元素還不有序,你想上天),將a1與a0比較,如果a0比a1大,則將a0移到1號位,a1放到0號位;如果a0比a1小,則什麼也不做。此時a0和a1就是有序序列,然後需要找出a2在這個有序序列中的位置(有序序列從後往前取出元素與a2比較),將其插入進去即可。

形象一點說像極了平時大家鍾愛的打牌運動。筆者寂寞的喜歡乙個人鬥地主(這愛好…),運氣一直很衰,md第一張是個3!!!沒辦法,拿出來放到最左邊,此時手裡的牌是有序的,桌面的牌就是無序的部分。再摸一張,我擦是個5,筆者有強迫症,必須放到3後面。再摸一張傻眼了,竟然是個4,那5往後挪,4放到5原來的位置上吧…直到排好王炸,哈哈,又贏了5000金豆(…)

條件:

資料基本有序時,選擇排序是一種很高效的演算法。jdk1.8中排序演算法的實現,當資料量小於47時,選擇的就是插入排序,在這個數量級上,選擇排序的效能是優於快排的。

原理:

(1)分組有序和無序的;

(2)將無序的依次插入到有序的當中;

….時間複雜度:

同樣沒什麼好說的,n^2。

筆面試出現的頻率:

實現:

public

class

inssort ;

inssort(a);

print(a);

}public

static

void

print(int array)

system.out.println();

}/** 取出當前元素,往前查詢空缺,分塊容易遺忘,多寫 */

public

static

void

inssort(int array)

array[j + 1] = ins;}}

}

排序演算法 插入排序演算法

插入排序 insertion sort 演算法通過對未排序的資料執行逐個插入至合適的位置而完成排序工作。日常生活中人們整理橋牌的方法是一張一張的來,將每一張牌插入到其他已經有序的牌中的適當位置。和選擇排序演算法一樣,當前索引左邊的所有元素都是有序的,但它們的最終位置還沒有確定,為了給更小的元素騰出空...

排序演算法 插入排序

插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in place排序 即只需用到o 1 的額外空間的排序 因而在從後向前掃瞄過程中,需要反覆把已排...

排序演算法 插入排序

排序演算法之插入排序 參照新版程式 下面是錯誤的理解,正確的參考,後文已經修改過的部分。選擇排序,顧名思義,就是選擇乙個元素進行排序。原理 將原始序列分成兩部分,一部分已經有序,一部分無序。將無序中的元素逐個插入到有序序列中。這個也是兩層迴圈,就我個人理解,與氣泡排序是乙個原理。氣泡排序是每次都從無...