⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 比较各种排序的算法间的运行效率 自己写的不太完善
💻 CPP
字号:
#include <iostream>
#include <iomanip>
#include <fstream>
#include <ctime>
#include <cstdlib>

using namespace std;

const int NUM = 10000;
const int N = 5;

#include "bubblesort.cpp"
#include "insertsort.cpp"
#include "selectsort.cpp"
#include "quicksort.cpp"
#include "shellsort.cpp"
#include "heapsort.cpp"

#include "Use_MP.cpp"
#include "Use_CR.cpp"
#include "Use_XZ.cpp"
#include "Use_KS.cpp"
#include "Use_SL.cpp"
#include "Use_D.cpp"

#include "produce.cpp"
#include "IsSame.cpp"

int main()
{
    int opt;
    int i;
    double time_mp[N], time_cr[N], time_xz[N], time_ks[N], time_sl[N], time_d[N];
    int contrast_mp[N], contrast_cr[N], contrast_xz[N], contrast_ks[N], contrast_sl[N], contrast_d[N];
    int move_mp[N], move_cr[N], move_xz[N], move_ks[N], move_sl[N], move_d[N];
    double timeT_mp, timeT_cr, timeT_xz, timeT_ks, timeT_sl, timeT_d;
    long contrastT_mp, contrastT_cr, contrastT_xz, contrastT_ks, contrastT_sl, contrastT_d;
    long moveT_mp, moveT_cr, moveT_xz, moveT_ks, moveT_sl, moveT_d; 
    
    timeT_mp = 0;
    timeT_cr = 0;
    timeT_xz = 0;
    timeT_ks = 0;
    timeT_sl = 0;
    timeT_d = 0;
    
    contrastT_mp = 0;
    contrastT_cr = 0;
    contrastT_xz = 0;
    contrastT_ks = 0;
    contrastT_sl = 0;
    contrastT_d = 0;
    
    moveT_mp = 0;
    moveT_cr = 0;
    moveT_xz = 0;
    moveT_ks = 0;
    moveT_sl = 0;
    moveT_d = 0; 
    
    cout<<"#########################################################"<<endl;
    cout<<"#                欢迎使用排序比较测试系统               #"<<endl;
    cout<<"#########################################################"<<endl;  
    cout<<"    本系统使用10000个元素的数组进行排序,并输出排序时间及"<<endl;
    cout<<"比较次数和移动次数。每次进行选择,只是输出该种排序的结果"<<endl;
    cout<<"总共进行5组比较,最后进行综合比较。"<<endl;  
    
    for(i=0;i<N;i++)
    {
	  produce("before.txt");
	
	  cout<<"第"<<i+1<<"组数据比较"<<endl;
	  
      cout<<"   选择你要测试的排序方法:"<<endl;
      cout<<"   1.冒泡排序;"<<endl;
      cout<<"   2.插入排序;"<<endl;
      cout<<"   3.选择排序;"<<endl;
      cout<<"   4.快速排序;"<<endl;
      cout<<"   5.希尔排序;"<<endl;
      cout<<"   6.堆排序;"<<endl;
      cout<<"   其他.下一次选择。";
      cout<<"   ";
    
      cin>>opt;
    
      cout<<"排序类型 排序时间 比较次数 移动次数"<<endl;
    
      switch(opt) 
      {
                case 1:
                     Use_MP(time_mp[i],contrast_mp[i],move_mp[i]);	
	                 timeT_mp += time_mp[i];
                     contrastT_mp += contrast_mp[i];
                     moveT_mp += move_mp[i];
                     cout<<"冒泡排序"<<setw(9)<<time_mp[i]<<setw(9)<<contrast_mp[i]<<setw(9)<<move_mp[i]<<endl;
                     break;
                case 2:
                     Use_CR(time_cr[i],contrast_cr[i],move_cr[i]);
	                 timeT_cr += time_cr[i];
                     contrastT_cr += contrast_cr[i];
                     moveT_cr += move_cr[i];
                     cout<<"插入排序"<<setw(9)<<time_cr[i]<<setw(9)<<contrast_cr[i]<<setw(9)<<move_cr[i]<<endl;
                     break;
                case 3:
                     Use_XZ(time_xz[i],contrast_xz[i],move_xz[i]);
	                 timeT_xz += time_xz[i];
	                 contrastT_xz += contrast_xz[i];
	                 moveT_xz += move_xz[i];
	                 cout<<"选择排序"<<setw(9)<<time_xz[i]<<setw(9)<<contrast_xz[i]<<setw(9)<<move_xz[i]<<endl;
	                 break;
                case 4:
                     Use_KS(time_ks[i],contrast_ks[i],move_ks[i]);
	                 timeT_ks += time_ks[i];
                     contrastT_ks += contrast_ks[i];
                     moveT_ks += move_ks[i];
                     cout<<"快速排序"<<setw(9)<<time_ks[i]<<setw(9)<<contrast_ks[i]<<setw(9)<<move_ks[i]<<endl;
                     break;
                case 5:
                     Use_SL(time_sl[i],contrast_sl[i],move_sl[i]);
	                 timeT_sl += time_sl[i];
                     contrastT_sl += contrast_sl[i];
                     moveT_sl += move_sl[i];
                     cout<<"希尔排序"<<setw(9)<<time_sl[i]<<setw(9)<<contrast_sl[i]<<setw(9)<<move_sl[i]<<endl;
                     break;
                case 6:
                     Use_D(time_d[i],contrast_d[i],move_d[i]);
	                 timeT_d += time_d[i];
                     contrastT_d += contrast_d[i];
                     moveT_d += move_d[i];
                     cout<<"  堆排序"<<setw(9)<<time_d[i]<<setw(9)<<contrast_d[i]<<setw(9)<<move_d[i]<<endl;
                     break;
                default:
                        cout<<"--------"<<setw(9)<<"------"<<setw(9)<<"------"<<setw(9)<<"------"<<endl;
                        break;
      }
    
    if(opt!=1)
    {
      Use_MP(time_mp[i],contrast_mp[i],move_mp[i]);	
	  timeT_mp += time_mp[i];
      contrastT_mp += contrast_mp[i];
      moveT_mp += move_mp[i];
    }
     
    if(opt!=2)
    {
	  Use_CR(time_cr[i],contrast_cr[i],move_cr[i]);
	  timeT_cr += time_cr[i];
      contrastT_cr += contrast_cr[i];
      moveT_cr += move_cr[i];
    }
      
    if(opt!=3)
    {
	  Use_XZ(time_xz[i],contrast_xz[i],move_xz[i]);
	  timeT_xz += time_xz[i];
	  contrastT_xz += contrast_xz[i];
	  moveT_xz += move_xz[i];
    }
	  
    if(opt!=4)
    {
	  Use_KS(time_ks[i],contrast_ks[i],move_ks[i]);
	  timeT_ks += time_ks[i];
      contrastT_ks += contrast_ks[i];
      moveT_ks += move_ks[i];
    }
	  
    if(opt!=5)
    {
	  Use_SL(time_sl[i],contrast_sl[i],move_sl[i]);
	  timeT_sl += time_sl[i];
      contrastT_sl += contrast_sl[i];
      moveT_sl += move_sl[i];
    }
	  
    if(opt!=6)
    {
	  Use_D(time_d[i],contrast_d[i],move_d[i]);
	  timeT_d += time_d[i];
      contrastT_d += contrast_d[i];
      moveT_d += move_d[i];
    }
    //if(IsSame("mp_result.txt","cr_result.txt")&&IsSame("mp_result.txt","xz_result.txt")&&IsSame("mp_result.txt","ks_result.txt")&&IsSame("mp_result.txt","sl_result.txt")&&IsSame("mp_result.txt","d_result.txt"))
        //cout<<"OK! 所有这些排序的结果一致!!!"<<endl;  //该语句可以对各种排序的结果进行比较验证 
    }
                
    timeT_mp /= N;
    timeT_cr /= N;
    timeT_xz /= N;
    timeT_ks /= N;
    timeT_sl /= N;
    timeT_d /= N;
    
    contrastT_mp /= N;
    contrastT_cr /= N;
    contrastT_xz /= N;
    contrastT_ks /= N;
    contrastT_sl /= N;
    contrastT_d /= N;
    
    moveT_mp /= N;
    moveT_cr /= N;
    moveT_xz /= N;
    moveT_ks /= N;
    moveT_sl /= N;
    moveT_d /= N; 
    
    cout<<"这"<<N<<"组数据的平均情况"<<endl;
    cout<<"排序类型 排序时间 比较次数 移动次数"<<endl;
    cout<<"冒泡排序"<<setw(9)<<timeT_mp<<setw(9)<<contrastT_mp<<setw(9)<<moveT_mp<<endl;
    cout<<"插入排序"<<setw(9)<<timeT_cr<<setw(9)<<contrastT_cr<<setw(9)<<moveT_cr<<endl;
    cout<<"选择排序"<<setw(9)<<timeT_xz<<setw(9)<<contrastT_xz<<setw(9)<<moveT_xz<<endl;
    cout<<"快速排序"<<setw(9)<<timeT_ks<<setw(9)<<contrastT_ks<<setw(9)<<moveT_ks<<endl;
    cout<<"希尔排序"<<setw(9)<<timeT_sl<<setw(9)<<contrastT_sl<<setw(9)<<moveT_sl<<endl;
    cout<<"  堆排序"<<setw(9)<<timeT_d<<setw(9)<<contrastT_d<<setw(9)<<moveT_d<<endl;               
    
    getchar();
    getchar();
    
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -