排序綜合問題(八大排序)

2021-09-05 10:12:18 字數 1939 閱讀 4993

設計程式,利用隨機函式產生20000個隨機整數(1~1000000),完成下面功能:

(1)對這些數分別進行直接插入排序、折半插入排序、希爾排序、起泡排序、快速排序、簡單選擇排序、堆排序、2-路歸併排序,並把排序結果儲存到檔案中。

(2)分析上述排序演算法的效能(以執行程式所花費的時間為準進行對比),找出較快的排序方法。

(3)若排序的整數增加到100000個、100000000個,以上排序結果有什麼變化,請分析並驗證。

#include#include#include#define maxsize 20000   //順序表最大長度

using namespace std ;

typedef structredtype; //記錄型別

typedef structsqlist; //順序表型別

//直接插入排序

void insertsort(sqlist &l)

}//希爾排序 shellinsert() shellsort()

//對順序表l中的記錄進行一趟增量為dk的希爾排序

void shellinsert(sqlist &l,int dk)

--m ;

} }//快速排序 partition() qsort() quicksort()

//對順序表l中的子表l.r[low...high]進行一次劃分,並返回樞軸位置

int partition(sqlist &l,int low,int high)

l.r[s] = rc ;

}//初建堆

void creatheap(sqlist &l)

//堆排序演算法實現

void heapsort(sqlist &l) }

// 2-路歸併排序

//相鄰兩個有序子串行的歸併

void merge(redtype r,redtype t,int low,int mid,int high)

while(i<=mid)

t[k++] = r[i++] ; //將剩餘的 r[i..mid] 複製到 t 中

while(j<=high)

t[k++] = r[j++] ; //將剩餘的 r[j..high] 複製到 t 中

} //分

void msort(redtype r,redtype t,int low,int high) }

//遞迴呼叫排序

void mergesort(sqlist &l)

//建立順序表:向順序表l中新增10個記錄,記錄的關鍵字為1-100範圍內的隨機整數

void createlist(sqlist &l)

l.length =20000;

}//選單

void showmenu()

int main()

; //dt中存放的是希爾排序時使用的三個增量

showmenu() ;

printf("\n") ;

printf("測試資料量:1000\n") ;

printf("\n") ;

//將生成的隨機數讀入到 data.doc 檔案中

file * fpwrite = fopen("c:\\users\\lzy\\desktop\\data.doc","w") ;

for(int i=1;i<=l.length;i++)

fprintf(fpwrite,"%-8d ",l.r[i].key) ;

if(fpwrite!=null)

printf("初始資料讀入檔案成功\n") ;

fclose(fpwrite) ; //關閉檔案

cin>>n; //輸出選擇的排序方法序號

while(n!=0) //迴圈顯示選單,按0結束程式

return 0 ;

}

八大排序 堆排序

堆排序 利用大頂堆 小頂堆 堆頂記錄的是最大關鍵字 最小關鍵字 這一特性,使得每次從無序中選擇最大記錄 最小記錄 變得簡單。其基本思想為 大頂堆 1 將初始待排序關鍵字序列 r1,r2 rn 構建成大頂堆,此堆為初始的無須區 2 將堆頂元素r 1 與最後乙個元素r n 交換,此時得到新的無序區 r1...

八大排序 希爾排序

希爾排序 shell sort 是插入排序的一種。是直接插入排序的改進版,它是非穩定排序演算法。其得名於它的提出者d.l.shell,shell sort等演算法的提出打破了 排序演算法不可能突破o n 2 的魔咒,它將排序演算法的時間複雜度提成到了o nlogn 不可能超越的o n 2 徹底成為了...

八大排序 選擇排序

n個資料的檔案可經過n 1趟直接選擇排序得到有序結果。初始狀態 無序區 r 1.n 有序區為空。第一趟排序 在無序區r 1.n 選出下標最小的記錄r 1 通過比較獲得無序區中最小的,將他與無序區的第乙個記錄r 1 交換,使得r 1.1 和r 2.n 成為新的有序區域,和新的無序區域。第i趟排序 第i...