直接插入排序和折半插入排序

2021-07-02 20:45:00 字數 1162 閱讀 8921

1.直接插入排序

1.1插入排序

(insertion sort)

的基本思想:

每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排序好的序列中,直到全部記錄插入完成為止.

1.2 基本過程

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

1.3 基本方法

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

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

2.若r[j]的關鍵字小於或等於r[i]的關鍵字,則查詢過程結束,j + 1即為r[i]

1.4 插入位置

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

時間複雜度

當陣列和要求排序的順序相同時,為

o(n)

當陣列和要求排序的順序相反時,為

o(n * n)

平均時間複雜度為

o(n * n)

空間複雜度 o

(1)

穩定排序

完整c**

//首先實現簡單資料結構的直接插入排序—陣列

#include#include#define size 5

//直接插入排序子函式

void strinsertionsort(int *iptr,int size)

} //*(iptr+j+1)=temp; }}

//主函式

int main()

else high=m-1;

} //移動元素,往後統一挪

for(j=i-1;j>=high+1;j--)//}}

時間複雜度

當陣列和要求排序的順序相同時,為

o(n)

當陣列和要求排序的順序相反時,為

o(n * n)

平均時間複雜度為

o(n * n)

空間複雜度 o

(1)

穩定排序

插入排序之直接插入排序和折半插入排序

插入排序的基本思想是 將記錄分為有序和無序兩個序列。從無序序列中任取乙個記錄,然後根據該記錄的關鍵字大小在有序序列中查詢乙個合適的位置,使得該記錄放入這個位置後,這個有序序列仍然有序。每插入乙個記錄就稱為一趟插入排序,經過多趟插入排序,使得無序序列中的記錄全部插入到有序序列中,則排序完成。直接插入排...

直接插入排序與折半插入排序

首先看一下例子,將資料乙個個的插入到乙個列表中,插入後這個列表就排序好了 注意 這個列表是遞增的,而且記憶體空間已分配好,只是沒有填充真正的資料,如下 int insertsort mergetype l,int data for j l len 1 j 0 j else return 0 測試用例...

直接插入排序和折半插入排序演算法

直接插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。設陣列為a 0 n 1 1.初始時,a 0 自成1個有序區,無序區為a 1.n 1 令i 1 2.將a i 併入當前的有序區a 0 i ...