基礎演算法 直接插入排序

2021-07-11 07:55:36 字數 622 閱讀 6094

把陣列劃分為左右兩個區域,有序區和無序區,開始有序區只有乙個元素,就是陣列最左邊的元素。

每次取得無序區第乙個元素x,從有序區最右邊的值開始到最左邊,把比x大得元素都往後移動乙個位置,直到找到乙個不大於x的位置,或者到了最左邊(即有序區所有元素都比x大,x應該插入到最前面),停下來的位置就是插入元素x的位置。

下面這裡為什麼是 a[j+1]=t ?

因為如果是因為j>=0不滿足迴圈而退出,也就是j=-1,此時應該把元素儲存在a[0]也就是a[j+1]

對於如果是不滿足a[j]>t而退出迴圈,那麼此時a[j]位置的元素是小於等於t的,而原來a[j+1]的位置的元素是大於t的,且已經被往後移動了乙個位置,那麼a[j+1]就應該是放t的位置。

這裡用[5 4 2 3 1]模擬下過程

[5][4 2 3 1]

[4 5][2 3 1]

[2 4 5][3 1]

[2 3 4 5][1]

[1 2 3 4 5]

#include"array.h"

void isort(int a,int n)

}void isort1(int a,int n)

int main()

演算法基礎 直接插入排序

一 直接插入排序 基本思想 每次將乙個待排序的序列的乙個元素,插入到已經排好序的序列中。如待排序列a 假設我們希望序列是從下到大排列的,那麼,首先將序列a分解為a1 和a2 其中a1作為排好的序列,這樣一來,首先從a2中取第乙個元素 1,與a1中的1比較,按從下到大順序把 1放入a1中,a2的其他元...

基礎演算法 直接插入排序

少壯不努力,老大刷水題。過去讀書的時候因為腦子不好使,很多概念,公式,演算法都記不住,等長大了,營養趕上來了,才學習的時候就會覺得更加的深刻。直接插入排序就像平常我們打撲克牌一樣,我們總是在別人發牌的時候,拿到一張牌就把它插到合適的位置上,這個過程中我們的肉眼和大腦做了3件事 1 拿到新的牌,檢查這...

基礎演算法 直接插入排序

它的演算法思想是 把要排序的陣列分為了兩個部分,一部分是經過插入排序後有序的部分,另一部分是除去第一部分待插入的元素 先將第一部分排序完成,然後再插入這個元素.插入排序由於操作不盡相同,可分為直接插入排序,折半插入排序 又稱二分插入排序 鍊錶插入排序,希爾排序。我們先來看下直接插入排序。直接插入排序...