目錄
創(chuàng)新互聯于2013年成立,是專業(yè)互聯網技術服務公司,擁有項目成都網站設計、成都網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元城陽做網站,已為上家服務,為城陽各地企業(yè)和個人服務,聯系電話:18982081108排序綜合? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
一、問題描述
二、運行環(huán)境說明?
三、代碼段?
四、效果展示?
備注:大二(上)數據結構課程設計B題
一、問題描述給定N個(長整型范圍內的)整數,要求輸出從小到大排序后的結果
本題旨在測試各種排序算法在各種數據情況下的表現
各組測試數據特點如下:
· ?數據1:11個不相同的整數;
· ?數據2:1000個隨機整數;
· ?數據3:10000個隨機整數;
· ?數據4:100000個隨機整數;
· ?數據5:100000個順序整數;
· ?數據6:100000個逆序整數
輸入格式:
第一行給出正整數N(N≤10?0000)
隨后一行給出N個(長整型范圍內的)整數,其間以空格分隔
輸出格式:
在一行中輸出從小到大排序后的結果,數字間以1個空格分隔
輸入樣例:
11
4 981 10 -17 0 -20 29 50 8 43 -5
輸出樣例:
-20 -17 -5 0 4 8 10 29 43 50 981
二、運行環(huán)境說明?三、代碼段?【測試任務】
(1)按上述輸入樣例的格式生成數據1~數據6這6組數據集,
分別存儲到data1.txt ~?data6.txt這6個文件中
(2)實現以下6種排序算法:
? 直接插入排序、希爾排序、起泡排序、快速排序、簡單選擇排序、堆排序
(3)在主函數中分別調用上述排序函數,對data1.txt ~?data6.txt文件中的數據進行排序,
? 并記錄不同排序算法對不同數據集進行排序的耗時,將耗時輸出到顯示器,
? 并將排序結果按輸出樣例格式輸出到result1.txt ~ result6.txt這6個文件中
#include#include
#includeusing namespace std;
//--------------------------------------------------------------------------------------------
void InsertSort(int arr[], int length) //直接插入排序
{
if (arr == nullptr || length<= 0)
return;
for(int i=2;i<=length;i++)
if(arr[i]=1 && arr[0]=1 && arr[0]0 && flag)
{
flag=false;
for(int j=1;j<=m;j++)
if(arr[j]>arr[j+1])
{
flag=true;
int tem=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tem;
}
m--;
}
}
void QuickSort(int q[],int l,int r) //快速排序
{
if(l>=r) return;
int i=l-1,j=r+1,x=q[l+r>>1];
while(ix);
if(i0;i--)
HeapAdjust(arr,i,n);
}
void HeapSort(int arr[], int length) //堆排序
{
CreatHeap(arr,length);
for(int i=length;i>1;i--)
{
int tem=arr[1];
arr[1]=arr[i];
arr[i]=tem;
HeapAdjust(arr,1,i-1);
}
}
//--------------------------------------------------------------------------------------------
void GetData() //獲取整數數據函數
{
FILE *fp1,*fp2,*fp3,*fp4,*fp5,*fp6; //文件指針
fp1 = fopen("data1.txt", "w");
fprintf(fp1,"11\n");
fclose(fp1);
fp1 = fopen("data1.txt", "a");
fprintf(fp1,"4 981 10 -17 0 -20 29 50 8 43 -5");
fclose(fp1);
fp2 = fopen("data2.txt", "w");
fprintf(fp2,"1000\n");
fclose(fp2);
fp2 = fopen("data2.txt", "a");
srand((int)time(0)); //隨機種子
for(int i=1;i<=1000;i++)
fprintf(fp2,"%d ",((rand()<<15)+rand())%10000); //隨機整數的范圍為[0,10000)
fclose(fp2);
fp3 = fopen("data3.txt", "w");
fprintf(fp3,"10000\n");
fclose(fp3);
fp3 = fopen("data3.txt", "a");
srand((int)time(0)); //隨機種子
for(int i=1;i<=10000;i++)
fprintf(fp3,"%d ",((rand()<<15)+rand())%100000); //隨機整數的范圍為[0,100000)
fclose(fp3);
fp4 = fopen("data4.txt", "w");
fprintf(fp4,"100000\n");
fclose(fp4);
fp4 = fopen("data4.txt", "a");
srand((int)time(0)); //隨機種子
for(int i=1;i<=100000;i++)
fprintf(fp4,"%d ",((rand()<<15)+rand())%1000000); //隨機整數的范圍為[0,1000000)
fclose(fp4);
fp5 = fopen("data5.txt", "w");
fprintf(fp5,"100000\n");
fclose(fp5);
fp5 = fopen("data5.txt", "a");
for(int i=1;i<=100000;i++)
fprintf(fp5,"%d ",i); //100000個順序整數
fclose(fp5);
fp6 = fopen("data6.txt", "w");
fprintf(fp6,"100000\n");
fclose(fp6);
fp6 = fopen("data6.txt", "a");
for(int i=100000;i>=1;i--)
fprintf(fp6,"%d ",i); //100000個逆序整數
fclose(fp6);
}
//--------------------------------------------------------------------------------------------
void InitData(int R1[],int R2[],int R3[],int R4[],int R5[],int R6[]) //讀取整數數據函數
{
FILE *fp1,*fp2,*fp3,*fp4,*fp5,*fp6; //文件指針
if((fp1 = fopen("data1.txt", "r")) == NULL)
cout<< "不能打開文件data1.txt"<< endl;
else
{
int count1=0;
while(!feof(fp1))
{
fscanf(fp1,"%d",&R1[count1]);
count1++;
}
}
fclose(fp1);
if((fp2 = fopen("data2.txt", "r")) == NULL)
cout<< "不能打開文件data2.txt"<< endl;
else
{
int count2=0;
while(!feof(fp2))
{
fscanf(fp2,"%d",&R2[count2]);
count2++;
}
}
fclose(fp2);
if((fp3 = fopen("data3.txt", "r")) == NULL)
cout<< "不能打開文件data3.txt"<< endl;
else
{
int count3=0;
while(!feof(fp3))
{
fscanf(fp3,"%d",&R3[count3]);
count3++;
}
}
fclose(fp3);
if((fp4 = fopen("data4.txt", "r")) == NULL)
cout<< "不能打開文件data4.txt"<< endl;
else
{
int count4=0;
while(!feof(fp4))
{
fscanf(fp4,"%d",&R4[count4]);
count4++;
}
}
fclose(fp4);
if((fp5 = fopen("data5.txt", "r")) == NULL)
cout<< "不能打開文件data5.txt"<< endl;
else
{
int count5=0;
while(!feof(fp5))
{
fscanf(fp5,"%d",&R5[count5]);
count5++;
}
}
fclose(fp5);
if((fp6 = fopen("data6.txt", "r")) == NULL)
cout<< "不能打開文件data6.txt"<< endl;
else
{
int count6=0;
while(!feof(fp6))
{
fscanf(fp6,"%d",&R6[count6]);
count6++;
}
}
fclose(fp6);
}
//--------------------------------------------------------------------------------------------
double VariousSort(char c, int R[], int length)
{
double t;
clock_t startTime,endTime;
if(c=='I')//直接插入排序
{
startTime = clock(); InsertSort(R,length); endTime = clock();
t = (double)(endTime - startTime)/CLOCKS_PER_SEC;
return t;
}
else if(c=='M')//希爾排序
{
int len=3;
int dt[]={5,3,1};
startTime = clock();
MainShellSort(R,length,dt,len);
endTime = clock();
t = (double)(endTime - startTime)/CLOCKS_PER_SEC;
return t;
}
else if(c=='B')//冒泡排序
{
startTime = clock(); BubbleSort(R,length); endTime = clock();
t = (double)(endTime - startTime)/CLOCKS_PER_SEC;
return t;
}
else if(c=='Q')//快速排序
{
startTime = clock(); QuickSort(R,1,length); endTime = clock();
t = (double)(endTime - startTime)/CLOCKS_PER_SEC;
return t;
}
else if(c=='S')//簡單選擇排序
{
startTime = clock(); SelectSort(R,length); endTime = clock();
t = (double)(endTime - startTime)/CLOCKS_PER_SEC;
return t;
}
else//堆排序
{
startTime = clock(); HeapSort(R,length); endTime = clock();
t = (double)(endTime - startTime)/CLOCKS_PER_SEC;
return t;
}
}
//--------------------------------------------------------------------------------------------
void GetResult(int R1[],int R2[],int R3[],int R4[],int R5[],int R6[]) //獲取排序結果函數
{
double t[10];
InitData(R1,R2,R3,R4,R5,R6);
t[1]=VariousSort('I', R1, 11);
t[2]=VariousSort('I', R2, 1000);
t[3]=VariousSort('I', R3, 10000);
t[4]=VariousSort('I', R4, 100000);
t[5]=VariousSort('I', R5, 100000);
t[6]=VariousSort('I', R6, 100000);
printf("直接插入排序:\n");
for(int i=1;i<=6;i++)
printf("排序數據%d用時%lf秒\n",i,t[i]);
printf("對六類數據排序所用總時間為%lf秒\n",t[1]+t[2]+t[3]+t[4]+t[5]+t[6]);
puts("");
InitData(R1,R2,R3,R4,R5,R6);
t[1]=VariousSort('M', R1, 11);
t[2]=VariousSort('M', R2, 1000);
t[3]=VariousSort('M', R3, 10000);
t[4]=VariousSort('M', R4, 100000);
t[5]=VariousSort('M', R5, 100000);
t[6]=VariousSort('M', R6, 100000);
printf("希爾排序:\n");
for(int i=1;i<=6;i++)
printf("排序數據%d用時%lf秒\n",i,t[i]);
printf("對六類數據排序所用總時間為%lf秒\n",t[1]+t[2]+t[3]+t[4]+t[5]+t[6]);
puts("");
InitData(R1,R2,R3,R4,R5,R6);
t[1]=VariousSort('B', R1, 11);
t[2]=VariousSort('B', R2, 1000);
t[3]=VariousSort('B', R3, 10000);
t[4]=VariousSort('B', R4, 100000);
t[5]=VariousSort('B', R5, 100000);
t[6]=VariousSort('B', R6, 100000);
printf("冒泡排序:\n");
for(int i=1;i<=6;i++)
printf("排序數據%d用時%lf秒\n",i,t[i]);
printf("對六類數據排序所用總時間為%lf秒\n",t[1]+t[2]+t[3]+t[4]+t[5]+t[6]);
puts("");
InitData(R1,R2,R3,R4,R5,R6);
t[1]=VariousSort('Q', R1, 11);
t[2]=VariousSort('Q', R2, 1000);
t[3]=VariousSort('Q', R3, 10000);
t[4]=VariousSort('Q', R4, 100000);
t[5]=VariousSort('Q', R5, 100000);
t[6]=VariousSort('Q', R6, 100000);
printf("快速排序:\n");
for(int i=1;i<=6;i++)
printf("排序數據%d用時%lf秒\n",i,t[i]);
printf("對六類數據排序所用總時間為%lf秒\n",t[1]+t[2]+t[3]+t[4]+t[5]+t[6]);
puts("");
InitData(R1,R2,R3,R4,R5,R6);
t[1]=VariousSort('S', R1, 11);
t[2]=VariousSort('S', R2, 1000);
t[3]=VariousSort('S', R3, 10000);
t[4]=VariousSort('S', R4, 100000);
t[5]=VariousSort('S', R5, 100000);
t[6]=VariousSort('S', R6, 100000);
printf("簡單選擇排序:\n");
for(int i=1;i<=6;i++)
printf("排序數據%d用時%lf秒\n",i,t[i]);
printf("對六類數據排序所用總時間為%lf秒\n",t[1]+t[2]+t[3]+t[4]+t[5]+t[6]);
puts("");
InitData(R1,R2,R3,R4,R5,R6);
t[1]=VariousSort('H', R1, 11);
t[2]=VariousSort('H', R2, 1000);
t[3]=VariousSort('H', R3, 10000);
t[4]=VariousSort('H', R4, 100000);
t[5]=VariousSort('H', R5, 100000);
t[6]=VariousSort('H', R6, 100000);
printf("堆排序:\n");
for(int i=1;i<=6;i++)
printf("排序數據%d用時%lf秒\n",i,t[i]);
printf("對六類數據排序所用總時間為%lf秒\n",t[1]+t[2]+t[3]+t[4]+t[5]+t[6]);
FILE *fp1,*fp2,*fp3,*fp4,*fp5,*fp6; //文件指針
fp1 = fopen("result1.txt", "w");
for(int i=1;i<=11;i++)
fprintf(fp1,"%d ",R1[i]);
fclose(fp1);
fp2 = fopen("result2.txt", "w");
for(int i=1;i<=1000;i++)
fprintf(fp2,"%d ",R2[i]);
fclose(fp2);
fp3 = fopen("result3.txt", "w");
for(int i=1;i<=10000;i++)
fprintf(fp3,"%d ",R3[i]);
fclose(fp3);
fp4 = fopen("result4.txt", "w");
for(int i=1;i<=100000;i++)
fprintf(fp4,"%d ",R4[i]);
fclose(fp4);
fp5 = fopen("result5.txt", "w");
for(int i=1;i<=100000;i++)
fprintf(fp5,"%d ",R5[i]);
fclose(fp5);
fp6 = fopen("result6.txt", "w");
for(int i=1;i<=100000;i++)
fprintf(fp6,"%d ",R6[i]);
fclose(fp6);
}
//--------------------------------------------------------------------------------------------
int main()
{
int R1[20],R2[1010],R3[10010],R4[100010],R5[100010],R6[100010];
GetData();
printf("六類數據預覽:\n");
printf("數據1:11個不相同的整數\n");
printf("數據2:1,000個[0,10000)范圍內隨機整數\n");
printf("數據3:10,000個[0,100000)范圍內隨機整數\n");
printf("數據4:100,000個[0,1000000)范圍內隨機整數\n");
printf("數據5:[1,100000]范圍內所有整數從小到大排列\(zhòng)n");
printf("數據6:[1,100000]范圍內所有整數從大到小排列\(zhòng)n\n");
printf("接下來將調用六類排序方法對以上六類數據進行從小到大排序,并測算排序所用時間!\n\n");
GetResult(R1,R2,R3,R4,R5,R6);
return 0;
}
四、效果展示?你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網站欄目:排序綜合(C++版)-創(chuàng)新互聯
網頁網址:http://muchs.cn/article6/cdsgig.html
成都網站建設公司_創(chuàng)新互聯,為您提供用戶體驗、微信小程序、虛擬主機、做網站、移動網站建設、Google
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯