演算法導論第二章問題研究2

2021-06-19 15:31:19 字數 757 閱讀 7464

書上習題2-1 在合併排序中對小陣列採用插入排序。以下是我寫的**:

//合併排序+插入排序結合法

#include #include using namespace std;

int* insertion_sort(int a,int b,int p,int q,int r);

void merge(int a,int p,int q,int r);

void merge_sort(int a,int p,int r,int k);

void main()

else

}}int *insertion_sort(int a,int b,int p,int q,int r)

else

}

a)插入排序時間複雜度o(n^2)對於長度為k的子列表都有o(k^2),則n/k個為(k^2)*n/k=o(nk)

b)由於有n/k個子列表,那麼共有log(n/k)+1層。每一層的代價是o(n),因此總共的時間複雜度為o(nlog(n/k));

c).標準的合併演算法時間複雜度為o(nlog(n)),要使修改後的演算法具有與標準合併排序演算法一樣的漸進執行時間,k的最大漸進值是logn,原來時間複雜度為o(nk + nlog(n/k)),現在變為了o(nlogn + nlog(n/logn)),忽略nlog(n/logn)的影響,這樣即為o(nlogn);

d)在實踐中,k的值應為:當p=0時,有k<=r/k  k<=√r  kmax=√r  kmin=2

演算法導論第二章

插入排序原始碼 1 include 2 include 3 4using namespace std 56 void insert sort inta 7 17 a i 1 key 18 19 2021 intmain 22view code 逆序輸出 1 include 2 include 3 4...

演算法導論 第二章作業

作業2.1 2 template void insert t a,int n a i 1 key 2.1 3 template void find t a,int n,t v if i 1 v nil 迴圈不變式 初始化 i 1,v還沒和任何a陣列中的元素比較,所以是 1,它為真。保持 如果j迴圈到...

演算法導論第二章筆記

這一章首先以乙個插入排序演算法開始,以此為切入點分析演算法。書上以偽 來介紹演算法,但是在這裡我基本上會用c語言實現一遍,並用自己的語言複述一遍演算法的思想。首先附上插入排序的具體實現。void insert sort eletype arr int start int end arr j 1 te...