表插入
時間複雜度o(n^2)
附加空間o(1)
穩定排序
#define _crt_secure_no_warnings
#include using namespace std;
#define len 8 // 有len個元素要排
struct record ;
void linklistinsertsort(record *arr, int length) // length是要排序的元素的個數,0號單元除外
arr[i].next = arr[q].next; // p為0時亦然
arr[q].next = i; }}
int main(void)
; a[0].next = 1; // 0號單元作為頭結點,指標域注意初始化
for (int i = 1; i <= len; ++i)
cin >> a[i].key >> a[i].otherinfo;
linklistinsertsort(a, len);
for (int p = a[0].next; p != 0 ; p = a[p].next)
cout << a[p].key << '\t' << a[p].otherinfo << endl;
return 0;}/*
in.txt:
49 1
38 0
65 0
97 0
76 0
13 0
27 0
49 2
out:
13 0
27 0
38 0
49 1
49 2
65 0
76 0
97 0
*/
插入排序(二) 表插入排序
上篇文章已經提到直接插入排序中,時間消耗在了元素間的比較次數和移動這兩方面。折半插入排序可以減小比較次數,而表插入排序則可以避免元素移動。但它需要建立資料結構,並且需要額外的空間 省時一般都耗空間,這個在演算法上很常見哦!首先給出表結構,定義如下 define size 100 typedef st...
表插入排序
時間複雜度o n 2 空間複雜度o n 這是穩定的排序方法 表插入排序 include includeusing namespace std define size 10 define max 1000 typedef int elemtype typedef structslnode typede...
7 插入排序之折半插入排序
7 折半插入排序 折半插入 考慮到插入第i個元素前面的i 1個元素是有序的,計算0 i 1的中間點,和i個元素進行比較,這樣完成了折半。然後不停地用上面的步驟,快速的找出第i個元素的位置。時間複雜度 折半插入排序比直接插入排序明顯減少了關鍵字之間的比較次數,但是移動次數是沒有改變。所以,折半插入排序...