亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? allsorttimecompare.cpp

?? 各種很經典的排序算法
?? CPP
字號:
// 各種排序算法的實驗比較
//計算不同初始狀態與排序規模下的各種排序算法的運行時間

#include "time.h"
#include "iostream"
#include "stdlib.h"
#include "string.h"
#include "Compare.h"
#include "Node.h"
#include "StraightInsertSorter.h"
#include "ImprovedInsertSorter.h"
#include "BinaryInsertSorter.h"
#include "BubbleSorter.h"
#include "ImprovedBubbleSorter.h"
#include "StraightSelectSorter.h"
#include "ShellSorter.h"
#include "HeapSorter.h"
#include "QuickSorter.h"
#include "ImprovedQuickSorter.h"
#include "TwoWayMergeSorter.h"
#include "ImprovedTwoWayMergeSorter.h"
#include "BucketSorter.h"
#include "RadixSorter.h"
#include "LinkRadixSorter.h"
using namespace std;

char a[3][10]={"隨機","正序","逆序"};

// 設定隨即函數的種子
inline void Randomize() 
  { srand(1); }

//返回一個0到n-1之間的隨機數
inline int Random(int n)
  { return rand() % (n); }

// Timing variables and functions
clock_t tstart = 0;  // Time at beginning of timed section

// Initialize the program timer
void Settime()
  { tstart = clock(); }

// Return the elapsed time since the last call to Settime
double Gettime()
  { return (double)((double)clock() - (double)tstart)/
           (double)CLOCKS_PER_SEC; }

inline void swap(int * array, int x, int y)	//交換位置x和y的元素
{
	int temp=array[x];
	array[x]=array[y];
	array[y]=temp;
}
void main()
{
	int numofsort;	//輸入規模:10, 100 ,1000 ,10000 ,100000 ,1000000 
	int wayofsort;	//排序算法的序號
	int flag;		//初始數組順序:正序、逆序、隨機順序,其中正序和逆序分別為已排序及逆排序
	while(1)
	{
		Randomize();	
		cout<<endl;			
		cout<<"  直接插入排序                   1   優化的插入排序                    2"<<endl;
		cout<<"  二分法插入排序                 3   起泡排序                           4"<<endl;
		cout<<"  優化的起泡排序                 5   直接選擇排序                       6"<<endl;
		cout<<"  Shell 排序/2                   7   Shell 排序/3                       8"<<endl;
		cout<<"  快速排序                       9   優化的快速排序                    10"<<endl;
		cout<<"  兩路歸并排序                  11   優化的兩路歸并排序                12"<<endl;
		cout<<"  堆排序                        13   基數排序/2                        14"<<endl;
		cout<<"  基數排序/4                    15   基數排序/8                        16"<<endl;
		cout<<"  基數排序(隊列實現)/2          17   基數排序(隊列實現)/4              18"<<endl;
		cout<<"  基數排序(隊列實現)/8          19   計算所有排序時間                  20"<<endl;
		cout<<endl;

		cout<<"請輸入排序算法的序號(0-退出):";
		cin>>wayofsort;
		if(wayofsort==0) exit(1);
		cout<<"請輸入數組規模:";
		cin>>numofsort;
		if(numofsort>1000000)
		{
			cout<<"sorry,數據規模太大!";
			exit(1);
		}
		cout<<"請輸入初始狀態(隨機0 正序1 逆序2):";
		cin>>flag;
		int allflag=0;
		wayofsort--;
		if(wayofsort==19)
		{
			wayofsort=0;
			allflag=1;
		}
begin:
		wayofsort++;
		int *sortarray =new int[1000000];
		int *temparray =new int[1000000];
		//產生隨機數組,長度為1000000
		Randomize();	
		for(int i=0;i<1000000;i++)
		sortarray[i]=Random(32003);
		//產生正序、逆序數組
		if(flag==1||flag==2)
		{
			//實例化快速排序類
			ImprovedQuickSorter<int,Compare> sorter;
			sorter.Sort(sortarray,0,1000000-1);
			if(flag==2)
			{
				for(int i=0;i<1000000/2;i++)
					swap(sortarray,i,999999-i);
			}
		}
		//開始排序
		switch(wayofsort)
		{
		case 1:
			{	//直接插入排序
				//實例化直接插入排序類
				StraightInsertSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray+numofsort*i,numofsort);
				cout<<"直接插入排序"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 2:
			{	//改進的插入排序
				//實例化優化的插入排序類
				ImprovedInsertSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray+numofsort*i,numofsort);
				cout<<"改進的插入排序"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 3:
			{	//二分法插入排序
				//實例化二分法插入排序類
				BinaryInsertSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray+numofsort*i,numofsort);
				cout<<"二分法插入排序"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 4:
			{	//起泡排序
				//實例化起泡排序類
				BubbleSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray+numofsort*i,numofsort);
				cout<<"起泡排序"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 5:
			{	//改進的起泡排序
				//實例化優化的起泡排序類
				ImprovedBubbleSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray+numofsort*i,numofsort);
				cout<<"改進的起泡排序"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 6:
			{	//直接選擇排序
				//實例化直接選擇排序類
				StraightSelectSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray+numofsort*i,numofsort);
				cout<<"直接選擇排序"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 7:
			{//Shell 排序/2
				//實例化Shell排序類
				ShellSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray+numofsort*i,numofsort);
				cout<<"Shell 排序/2"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 8:
			{//Shell 排序/3
				//實例化Shell排序類
				ShellSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.delta3Sort(sortarray+numofsort*i,numofsort);
				cout<<"Shell 排序/3"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 9:
			{	//快速排序
				//實例化快速排序類
				QuickSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray,0+numofsort*i,numofsort-1+numofsort*i);
				cout<<"快速排序"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 10:
			{	//優化的快速排序
				//實例化優化的快速排序類
				ImprovedQuickSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray,0+numofsort*i,numofsort-1+numofsort*i);
				cout<<"優化的快速排序"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 11:
			{	//兩路歸并排序
				//實例化兩路歸并排序類
				TwoWayMergeSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray,temparray,0+numofsort*i,numofsort-1+numofsort*i);
				cout<<"兩路歸并排序"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 12:
			{	//優化的兩路歸并排序
				//實例化優化的兩路歸并排序類
				ImprovedTwoWayMergeSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray,temparray,0+numofsort*i,numofsort-1+numofsort*i);
				cout<<"優化的兩路歸并排序"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 13:
			{	//堆排序
				//實例化堆排序類
				HeapSorter<int,Compare> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray+numofsort*i,numofsort);
				cout<<"堆排序"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 14:
			{	//基數排序/2
				//實例化基數排序類
				RadixSorter<int> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray+numofsort*i,numofsort,16,2);
				cout<<"基數排序/2"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 15:
			{	//基數排序/4
				//實例化基數排序類
				RadixSorter<int> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
					sorter.Sort(sortarray+numofsort*i,numofsort,8,4);
				cout<<"基數排序/4"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 16:
			{	//基數排序/8
				//實例化基數排序類
				RadixSorter<int> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
				{
				sorter.Sort(sortarray+numofsort*i,numofsort,5,8);
				}
				cout<<"基數排序/8"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 17:
			{	//基數排序(隊列實現)/2
				Node* sortarray1=new Node[1000000];
				for(int ii=0;ii<1000000;ii++)
					sortarray1[ii].key=sortarray[ii];

				//實例化基于靜態鏈的基數排序類
				LinkRadixSorter<Node> sorter;

				Settime();
				for(int i=0;i<1000000/numofsort;i++)
				{
				sorter.Sort(sortarray1+numofsort*i,numofsort,16,2);
				}
				cout<<"基數排序(隊列實現)/2"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				delete[] sortarray1;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 18:
			{	//基數排序(隊列實現)/4
				Node* sortarray1=new Node[1000000];
				for(int ii=0;ii<1000000;ii++)
					sortarray1[ii].key=sortarray[ii];

				//實例化基于靜態鏈的基數排序類
				LinkRadixSorter<Node> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
				{
				sorter.Sort(sortarray1+numofsort*i,numofsort,8,4);
				}
				cout<<"基數排序(隊列實現)/4"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				delete[] sortarray1;
				if(allflag==1)  
					goto begin;
				break;
			}
		case 19:
			{	//基數排序(隊列實現)/8
				Node* sortarray1=new Node[1000000];
				for(int ii=0;ii<1000000;ii++)
					sortarray1[ii].key=sortarray[ii];

				//實例化基于靜態鏈的基數排序類
				LinkRadixSorter<Node> sorter;
				Settime();
				for(int i=0;i<1000000/numofsort;i++)
				{
				sorter.Sort(sortarray1+numofsort*i,numofsort,5,8);
				}
				cout<<"基數排序(隊列實現)/8"<<endl
					<<"排序規模:"<<numofsort<<endl<<"初始狀態:"<<a[flag]<<endl
					<<Gettime()/1000000*numofsort<<"seconds"<<endl;
				delete[] sortarray;
				delete[] sortarray1;
				if(allflag==1)  
					goto begin;
				break;
			}
			
		}

	}//end while
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品1区二区.| 精品国精品国产尤物美女| 国产精品福利在线播放| 国产成人综合视频| 国产三级一区二区三区| 粉嫩绯色av一区二区在线观看| 一区二区欧美国产| 91麻豆国产在线观看| 亚洲永久免费av| 91麻豆精品国产自产在线| 麻豆高清免费国产一区| 久久青草欧美一区二区三区| 粉嫩欧美一区二区三区高清影视 | 欧美一区二区三区日韩视频| 麻豆91在线看| 国产精品国产三级国产aⅴ中文| 97久久超碰国产精品电影| 亚洲线精品一区二区三区| 5858s免费视频成人| 国产精品一区二区久久不卡 | 欧美成人一区二区三区在线观看| 精品一区二区三区久久久| 国产精品久久综合| 色婷婷精品大在线视频| 日韩激情一区二区| 亚洲国产激情av| 欧美日韩视频一区二区| 国产精品一区在线观看乱码| 亚洲精品日韩综合观看成人91| 日韩美女视频一区二区在线观看| 成人网在线播放| 婷婷夜色潮精品综合在线| 欧美激情一区二区| 91精品国产91热久久久做人人| 国产成a人无v码亚洲福利| 亚洲国产欧美在线| 国产精品久久久一本精品| 欧美午夜电影在线播放| 国产suv精品一区二区三区| 亚洲国产成人porn| 欧美国产日产图区| 日韩色视频在线观看| av一二三不卡影片| 韩国女主播一区二区三区| 亚洲精品成人在线| 中文字幕av不卡| 欧美一级片免费看| 日本高清不卡视频| 国产成人亚洲综合a∨婷婷| 日日噜噜夜夜狠狠视频欧美人| 国产精品久久久一本精品| 久久久综合视频| 日韩欧美卡一卡二| 欧美老年两性高潮| 99久久久免费精品国产一区二区| 精品在线你懂的| 人人狠狠综合久久亚洲| 午夜精品免费在线观看| 亚洲自拍欧美精品| 亚洲人吸女人奶水| 国产精品国产三级国产普通话蜜臀 | 亚洲黄色在线视频| 欧美国产精品一区| 国产亚洲欧美中文| 欧美tickling网站挠脚心| 欧美综合色免费| 99精品一区二区| 国产激情一区二区三区桃花岛亚洲| 午夜影院久久久| 亚洲一二三四在线| 一区二区视频在线| 18欧美乱大交hd1984| 亚洲国产激情av| 国产欧美一区二区在线| 久久夜色精品一区| 精品处破学生在线二十三| 日韩一区二区视频在线观看| 日韩视频不卡中文| 精品国内二区三区| 久久久久亚洲综合| 久久九九全国免费| 欧美韩日一区二区三区四区| 久久综合色综合88| 久久久久久**毛片大全| 久久久www成人免费无遮挡大片| 欧美sm极限捆绑bd| 久久综合九色综合欧美98| 精品国产91乱码一区二区三区 | 午夜精品国产更新| 天天av天天翘天天综合网 | 国产激情视频一区二区三区欧美 | 91丝袜呻吟高潮美腿白嫩在线观看| 国产91在线|亚洲| 成人网在线免费视频| 色婷婷精品久久二区二区蜜臀av | 成人免费一区二区三区视频| 亚洲欧美激情一区二区| 午夜久久久久久电影| 久久99国产精品免费网站| 国产精品一线二线三线精华| 99精品国产91久久久久久| 日本精品一区二区三区四区的功能| 国产精品久久久久久久久久免费看 | 男女性色大片免费观看一区二区| 日韩电影在线免费观看| 精品午夜一区二区三区在线观看 | 在线观看av一区| 欧美精品在线观看播放| 久久女同精品一区二区| 国产日韩欧美综合在线| 亚洲免费av网站| 蜜臀va亚洲va欧美va天堂| 国产福利电影一区二区三区| 91老师片黄在线观看| 5566中文字幕一区二区电影| 国产亚洲人成网站| 一区二区在线观看免费视频播放 | 国产亚洲一二三区| 亚洲线精品一区二区三区八戒| 亚洲精品中文字幕乱码三区| 亚洲va欧美va天堂v国产综合| 老司机精品视频导航| 波多野结衣在线一区| 欧美日韩一区二区在线观看视频| 精品国产伦一区二区三区观看体验| 中文成人av在线| 人人超碰91尤物精品国产| gogo大胆日本视频一区| 日韩一区二区三区在线观看| 国产精品乱人伦一区二区| 日本免费新一区视频| 91视频国产观看| 久久这里只有精品首页| 亚洲国产综合色| 91在线精品一区二区| 精品国产一区二区亚洲人成毛片| 亚洲日本va午夜在线影院| 国产九九视频一区二区三区| 欧美日韩一区在线| 亚洲视频一区二区在线观看| 国产一区二区三区在线观看免费视频 | 亚洲午夜一区二区三区| 国产aⅴ综合色| 欧美不卡一区二区| 性久久久久久久久久久久| 91在线免费播放| 久久久不卡网国产精品一区| 久久se这里有精品| 欧美精品一卡两卡| 亚洲精品国产精品乱码不99| 成人污污视频在线观看| 国产日产欧美一区二区视频| 日韩成人一级大片| 欧美日韩一级二级三级| 亚洲三级小视频| 99热国产精品| 国产精品每日更新| 成人在线视频首页| 国产欧美日韩精品一区| 国产麻豆成人精品| wwwwww.欧美系列| 激情综合网激情| 久久久久亚洲蜜桃| 国产a精品视频| 欧美激情一区在线| 国产宾馆实践打屁股91| 国产亚洲va综合人人澡精品| 精品一区二区免费| 久久久久国产精品免费免费搜索| 国产一区三区三区| 久久精品一区二区三区四区| 国产999精品久久久久久| 久久免费电影网| 国产成人午夜精品5599| 欧美激情一区二区| 91亚洲精品一区二区乱码| 亚洲啪啪综合av一区二区三区| 91在线小视频| 亚洲成人综合在线| 欧美一级视频精品观看| 精品一区二区三区在线观看 | 欧美三级电影一区| 视频一区中文字幕| 精品久久久久一区二区国产| 国产成人亚洲综合a∨婷婷| 中文字幕永久在线不卡| 日本韩国一区二区三区视频| 舔着乳尖日韩一区| 欧美xxxx在线观看| 成人性生交大片免费看视频在线| 亚洲天堂福利av| 欧美一区二区三级| 国产精品一区二区三区网站| 中文字幕日韩一区二区| 欧美日韩综合不卡| 韩国理伦片一区二区三区在线播放 | 精品成人一区二区| 成人av免费网站| 香蕉av福利精品导航| 精品对白一区国产伦|