資源簡介
用C/C++語言編程實現歸并分類算法6.3 和快速分類算法6.6。對于快速分類,SPLIT中的劃分元素采用三者A(low),A(high),A((low+high)/2)中其值居中者。
(2)隨機產生20組數據(比如n=5000i,1≤i≤20)。數據均屬于范圍(0,105)內的整數。對于同一組數據,運行快速分類和歸并分類算法,并記錄各自的運行時間(以毫秒為單位)。
(3)根據實驗數據及其結果來比較快速分類和歸并分類算法的平均時間,并得出結論。
代碼片段和文件信息
#include
#include
#include
#include
using?namespace?std;
int?mergesort(int*?Aint?amountint?lowint?high);
int?MERGE(int*?Aint?amountint?lowint?midint?high);
int?quicksort(int*?Aint?lowint?high);
int?SPLIT(int*?Aint?lowint?high);
int?main()
{
int?*array1[20]*array2[20]ij;
//設置array1、array2存放所有組數據的首地址
//若是用一個數組,第一次排序完畢,第二次排序所需時間一定減少(因為比較后不用互換節省時間),故設置了兩個相同的數組,更能比較出誰快誰慢
srand((unsigned)time(NULL));
for(i=0;i<20;i++){
int?*A=new?int?[5000*(i+1)];
int?*B=new?int?[5000*(i+1)];
//數組A與數組B存放每一組的數據,由于各組數據元素個數不相同,故設為動態數組
//數組A與數組B的數據相同
for(j=0;j<5000*(i+1);j++){
A[j]=rand()%100000;//是用隨機數賦值
B[j]=A[j];
}
//將每組數據首地址賦給array
array1[i]=A;
array2[i]=B;
}
//實行算法mergesort
double?TimeStart1=GetTickCount();//記錄排序開始時間
for(i=0;i<20;i++)
mergesort(array1[i]5000*(i+1)05000*(i+1)-1);
double?TimeEnd1=GetTickCount();//記錄排序結束時間
double?TimeUsed1=TimeEnd1-TimeStart1;//計算出排序所需時間
cout<<“算法mergesort排序耗時“<
//實行算法quicksort
double?TimeStart2=GetTickCount();//記錄排序開始時間
for(i=0;i<20;i++)
quicksort(array2[i]05000*(i+1)-1);
double?TimeEnd2=GetTickCount();//記錄排序結束時間
double?TimeUsed2=TimeEnd2-TimeStart2;//計算出排序所需時間
cout<<“算法quicksort排序耗時“<
//比較兩種算法所需時間
if(TimeUsed1==TimeUsed2)
cout<<“兩種算法一樣快!“< if(TimeUsed1 cout<<“mergesort算法較快!“< if(TimeUsed1>TimeUsed2)
cout<<“quicksort算法較快!“<
for(i=0;i<20;i++){
delete?arra
- 上一篇:21點紙牌C語言源代碼
- 下一篇:網絡安全編程技術與——配套代碼,作者:劉文濤
評論
共有 條評論