插入排序 直接插入排序與希爾排序

2022-03-11 02:53:16 字數 1693 閱讀 9504

插入排序(insertion sort)的基本思想是:每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。

本節介紹兩種插入排序方法:直接插入排序和希爾排序。

直接插入排序基本思想

1、基本思想

假設待排序的記錄存放在陣列r[1..n]中。初始時,r[1]自成1個有序區,無序區為r[2..n]。從i=2起直至i=n為止,依次將r[i]插入當前的有序區r[1..i-1]中,生成含n個記錄的有序區。

具體做法:

將待插入記錄r[i]的關鍵字從右向左依次與有序區中記錄r[j](j=i-1,i-2,…,1)的關鍵字進行比較:

① 若r[j]的關鍵字大於r[i]的關鍵字,則將r[j]後移乙個位置;

②若r[j]的關鍵字小於或等於r[i]的關鍵字,則查詢過程結束,j+1即為r[i]的插入位置。

關鍵字比r[i]的關鍵字大的記錄均已後移,所以j+1的位置已經騰空,只要將r[i]直接插入此位置即可完成一趟直接插入排序。

* user: sqtds

* date: 13-1-15

* time: 下午3:44

*/public

class insertion

public

static

void insertarray(int array ,int num,int current)else

if( i ==current-1)}}

public

static

void shiftarray(int array , int index ,int num,int current)

array[index] = num;

}public

static

void lnsertsort(int array)

while(j>=0&&t//當r[i].key≥r[j].key時終止

array[j+1]=t; //r[i]插入到正確的位置上

}//endif

}//insertsort

public

static

void main(string args);

int temp = sort(array);

lnsertsort(array);

for(int i : array)}}

希爾排序基本思想

基本思想:

先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同乙個組中。先在各組內進行直接插人排序;然後,取第二個增量d2

1重複上述的分組和排序,直至所取的增量dt=1(dt

t-l<…2

1),即所有記錄放在同一組中進行直接插入排序為止。

該方法實質上是一種分組插入方法。

for(i=d+1;i<=n;i++) //將r[d+1..n]分別插入各組當前的有序區

if(r[i].key//r[0]只是暫存單元,不是哨兵

do while(j>0&&r[0].key//插入r[i]到正確的位置上

} //endif

} //shellpass

void shellsort(seqlist r)

while(increment>1)

} //shellsort

插入排序(直接插入排序 希爾排序)

直接插入排序 基本思想 假設待排序的數存放在陣列arr 1.n 中。初始時,arr 1 自成1個有序區,無序區為arr 2.n 從i 2起直至i n為止,依次將arr i 插入當前的有序區arr 1.i 1 中,生成含n個記錄的有序區。演算法複雜度 對於具有n個記錄的檔案,要進行n 1次排序 各種狀...

插入排序 直接插入排序 希爾排序

1.直接插入排序 兩個陣列,有序陣列和無序陣列。排序前 無序陣列裡面所有的值都是無序的,有序陣列沒有值 排序中 無序陣列中拿出乙個數,放到有序陣列當中,有序陣列拿到數,將其按照大小有序的插入到無序陣列中 排序後 無序陣列中沒有數,有序陣列中的數為有序的。假設有一組無序序列 r0,r1,rn 1。1 ...

插入排序 直接插入排序 希爾排序

一 直接插入排序 1.思想 直接排序法,可以分為兩個部分,一部分是有序的,一部分是無序的.從這個圖上,應該是能看清楚直接插入排序的思想了.將無序部分的第乙個與有序部分進行比較.從有序部分的後面向前面比較,然後不斷地挪動有序部分的資料的位置 static void insertsort listlis...