第十六周專案3 歸併排序演算法的改進專案

2021-07-25 10:21:47 字數 1640 閱讀 4182

/*   

* 煙台大學計算機與控制工程學院  

* 完成日期:2023年12月16日  

*  * 問題描述:

採用歸併排序、快速排序等高效演算法進行排序,當資料元素較少時(如n≤64),經常直接使用直接插入排序演算法等高複雜度的演算法。這樣做,會帶來一定的好處,例如歸併排序減少分配、**臨時儲存區域的頻次,快速排序減少遞迴層次等。 

試按上面的思路,重新實現歸併排序演算法。

* 輸入描述:

* 程式輸出: */

**:[cpp]view plain

copy

#include 

#include 

#include 

#include 

#define minlength 64        //最短分段長度

typedef

intkeytype;    

//定義關鍵字型別

typedef

char

infotype[10];  

typedef

struct

//記錄型別

rectype;              //排序的記錄型別定義

void

getdata(rectype *&r, 

intn)  

//對r[low..high]按遞增有序進行直接插入排序

void

insertsort(rectype r,

intlow,

inthigh)  

r[j+1]=tmp;      //在j+1處插入r[i]

}  }  

//合併兩個有序表

void

merge(rectype r,

intlow,

intmid,

inthigh)  

else

//將第2段中的記錄放入r1中

while

(i<=mid)                      

//將第1段餘下部分複製到r1

while

(j<=high)                 

//將第2段餘下部分複製到r1

for(k=0,i=low; i<=high; k++,i++) 

//將r1複製回r中

r[i]=r1[k];  

}  //一趟合併

void

mergepass(rectype r,

intlength,

intn)    

//對整個數序進行一趟歸併

//自底向上的二路歸併演算法,但太短的分段,用直接插入完成

void

mergesort(rectype r,

intn)  

}  intmain()  

printf("\n"

);  

printf("排序後(後30個):\n"

);  

i=0;  

while

(i<30)  

printf("\n"

);  

free(r);  

return

0;  

}  

執行結果:

第十六周專案3 歸併排序演算法的排序

問題及 檔名稱 專案3.cpp 作 者 李曉鈺 完成日期 2016年12月17日 版 本 號 v1.0 問題描述 歸併排序演算法的改進 採用歸併排序 快速排序等高效演算法進行排序,當資料元素較少時 如n 64 經常直接使用直接插入排序演算法等高複雜度 的演算法。這樣做,會帶來一定的好處,例如歸併排序...

第十六周專案3 歸併排序演算法改進

問題及 煙台大學計算機與控制工程學院 作 者 劉倩 完成日期 2016年12月9日 問題描述 採用歸併排序 快速排序等高效演算法進行排序,當資料元素較少時 如n 64 經常直接使用直接插入排序演算法等高複雜度的演算法。這樣做,會帶來一定的好處,例如歸併排序減少分配 臨時儲存區域的頻次,快速排序減少遞...

第十六周 專案3 歸併排序演算法的改進

檔名稱 main.cpp,btree.h,btree.cpp 完成日期 2015年12月14日 版本號 code block 12.11 問題描述 採用歸併排序 快速排序等高效演算法進行排序,當資料元素較少時 如 n 64 經常直接使用直接插入排序演算法等高複雜度的演算法。這樣做,會帶來一定的好處,...