插入排序 直接插入

2021-08-15 09:57:53 字數 1203 閱讀 6094

包括:直接插入排序,二分插入排序(又稱折半插入排序),鍊錶插入排序,希爾排序(又稱縮小增量排序)。

屬於穩定排序的一種(通俗地講,就是兩個相等的數不會交換位置)

直接插入排序是一種簡單的插入排序法,其基本思想是:把待排序的記錄按其關鍵碼值的大小逐個插入到乙個已經排好序的有序序列中

,直到所有的記錄插入完為止,得到乙個新的有序序列。

例如,已知待排序的一組記錄是:

60,71,49,11,24,3,66

假設在排序過程中,前3個記錄已按關鍵碼值遞增的次序重新排列,構成乙個有序序列:

49,60,71

將待排序記錄中的第4個記錄(即11)插入上述有序序列,以得到乙個新的含4個記錄的有序序列。首先,應找到11的插入位置,

再進行插入。可以講11放入陣列的第乙個單元r[0]中,這個單元稱為監視哨,然後從71起從右到左查詢,11小於71,將71右移乙個位置,

11小於60,又將60右移乙個位置,11小於49,又再將49右移乙個位置,這時再將11與r[0]的值比較,11≥r[0],它的插入位置就是r[1]。

假設11大於第乙個值r[1]。它的插入位置應該在r[1]和r[2]之間,由於60已經右移了,留出來的位置正好留給11.後面的記錄依照同樣的

方法逐個插入到該有序序列中。若記錄數n,續進行n-1趟排序,才能完成。

(1) 設定監視哨r[0],將待插入記錄的值賦值給r[0];

(2) 設定開始查詢的位置j;

(3) 在陣列中進行搜尋,搜尋中將第j個記錄後移,直至r[0].key≥r[j].key為止;

(4) 將r[0]插入r[j+1]的位置上。

插入排序用**的實現方式

package binary.tree;

public

class insertsort ;

}public

insertsort(int size)

//插入排序

public

void

inset_sort()

a[j+1]=insertnode;}}

//遍歷

public

void

display()

}public

static

void

main(string args)

}

插入排序(直接插入)

今天學習了插入排序,現在將它們整理出來,如果有不對的地方,歡迎批評指正 插入排序的思想就是將乙個待排資料,按照其大小插入到乙個已經排好的資料中的適當位置,知道插入完畢 截了乙個圖如下 排序的過程就是這樣。驗證 如圖 這裡的迴圈我是從最後乙個數開始的 如下 function insersort arr...

插入排序 直接插入

直接插入 就是把未排序的資料插入到已排序的數列中去 步驟 從排序陣列的第二個數開始,依次與前面的數比較,比前面的數大的話就插入到前面去,依次迴圈完。public static void sort int a a index 1 key 完整 package sort 直接插入排序 author li...

插入排序 直接插入排序

直接插入排序演算法思想 將整個資料表分成左右兩個子表,其中左子表為有序表,右子表為無序表 整個排序過程就是將右子表中的元素逐個插入到左子表中,直到右子表為空,而左子表成為新的有序表。演算法過程分析 將待排序的元素存放在陣列r n 1 中,在初始狀態下,r 0 為監視哨,r 1 為有序區,r 2 r ...