插入排序和歸併排序 Algorithm

2021-06-22 21:31:01 字數 934 閱讀 5124

插入排序:

templatevoid insert_sort(t* ptr, int length)

ptr[j+1] = key;

}}

歸併排序:
//

// test case: merge(ptr, i, i, i+1);

// test case: merge(ptr, i, i, i);

//templatevoid merge(t *ptr, int bg, int mid, int end)

插入排序時間複雜度是n^2, 空間複雜度為1

歸併排序複雜度為nlgn,  空間複雜度為 n

在n較小的時候,插入排序較快, 當n較大的時候,歸併排序優勢異常明顯,測試:

程式:

void test_insert_sort()

else if (lidx < lsize)

ptr[aidx] = latter[lidx++];

else

ptr[aidx] = former[fidx++];

aidx++;

} delete former; former = 0;

delete latter; latter = 0;

return ret_count;

}templateint compute_reverse_pair(t* ptr, int bg, int end)

測試:

;

int length = sizeof(test_data) / sizeof(test_data[0]);

cout << compute_reverse_pair(test_data, 0, length-1) << endl;

}

插入排序和歸併排序

一共有三種 直接插入排序 希爾排序和折半插入排序。最後乙個折半插入排序,感覺用在陣列上面不太方便,就沒寫出來。遞迴實現沒有思路,使用的非遞迴演算法。直接插入排序 這個演算法預設前n個數是已經排好序的,n隨著你的插入逐漸變大,最開始是1。然後從後往前逐漸查詢應該插入的位置 我的演算法是從小到大,那就依...

插入排序和歸併排序

本人在csdn的原鏈結 首先是插入排序,這個過程就可以比喻成左手放牌 已排好序 右手抓牌 牌堆上最頂端的一張牌 然後放到左手,插到正確的位置 for j 2 to a.length key a j i j 1 while i 0 a i 0 key a i a i 1 key 空間複雜度為o 1 最...

插入排序和歸併排序

插入排序 c include using namespace std void main 定義乙個未排好序的陣列 int i,j,key for i 0 i 6 i 輸出排序前的序列 printf 3d a i for j 1 j 6 j a i 1 key coutprintf 3d a i co...