問題及描述:
/*
煙台大學計算機與控制工程學院
姓名:李金樸
日期:2017.12.10
檔名稱:ycds2017
問題描述:設計乙個函式,產生乙個至少5萬條記錄的資料集合。
在同一資料集上,用直接插入排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序等演算法進行排序,
記錄所需要的時間,經過對比,得到對複雜度不同的各種演算法在執行時間方面的感性認識。
輸入:無
輸出:各排序演算法的時間
分檔案
*/
#define maxsize 50000 //最多的資料,取5萬,只測試快速演算法,可以往大調整
//下面的符號常量和結構體針對基數排序
#define radix 10 //基數的取值
#define digits 10 //關鍵字位數
typedef int keytype; //定義關鍵字型別
typedef char infotype[10];
typedef struct //記錄型別
rectype; //排序的記錄型別定義
typedef struct node
radixrectype;
void insertsort(rectype r,int n); //直接插入排序
void shellsort(rectype r,int n); //希爾排序演算法
void bubblesort(rectype r,int n); //氣泡排序
void quicksort(rectype r,int n); //快速排序
void selectsort(rectype r,int n); //直接選擇排序
void heapsort(rectype r,int n); //堆排序
void mergesort(rectype r,int n); //歸併排序
//下面函式支援基數排序
void createlink(radixrectype *&p,rectype r,int n); //建立基數排序用的鍊錶
void destorylink(radixrectype *&p); //釋放基數排序用的鍊錶
void radixsort(radixrectype *&p); //基數排序
#include "sort.h"
#include //1. 對r[0..n-1]按遞增有序進行直接插入排序
void insertsort(rectype r,int n)
}
//7.歸併排序輔助1——合併有序表
void merge(rectype r,int low,int mid,int high)
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];
}
//7. 歸併排序輔助2——一趟歸併
void mergepass(rectype r,int length,int n) //對整個數序進行一趟歸併
else
}
t->next=null;
}
//8. 基數排序的輔助函式,釋放基數排序用的鍊錶
void destorylink(radixrectype *&p)
return;
}
//8. 實現基數排序:*p為待排序序列鍊錶指標,基數r和關鍵字位數d已經作為符號常量定義好
void radixsort(radixrectype *&p)
else
p=p->next; //取下乙個待排序的元素
}
p=null; //重新用p來收集所有結點
for (j=0; jnext=head[j];
t=tail[j];
}
}
t->next=null; //最後乙個結點的next域置null
//下面更新用於分離出第i位數字的d2
d2*=10;
}
}
#include #include #include #include #include "sort.h"
void getlargedata(rectype *&r, int n)
{
srand(time(0));
r=(rectype*)malloc(sizeof(rectype)*n);
for(int i=0; i執行結果:
學習心得:
通過這次的 練習,我體 會到了演算法時間複雜度的差異。
第5周專案1 5
all rights reserced.檔名稱 main.cpp 作者 李鑫 完成日期 2016.4.6 問題描述 使用複製建構函式,能用乙個已有的三角形物件,複製出新的三角形物件 include includeusing namespace std class double x,double y,...
第15周專案3
煙台大學計算機與控制工程學院 姓名 於琛 日期 2017.12.10 檔名稱 ycds2017 問題描述 採用歸併排序 快速排序等高效演算法進行排序,當資料元素較少時 如n 64 經常直接使用直接插入排序演算法等高複雜度的演算法。這樣做,會帶來一定的好處,例如歸併排序減少分配 臨時儲存區域的頻次,快...
第13周專案2
檔名稱 完成日期 2014 年 5 月 20 日 版本號 v1.0 對任務及求解方法的描述部分 輸入描述 問題描述 程式輸出 圓的比較 問題分析 演算法設計 include include using namespace std class point point double get x doub...