-
大小: 4KB文件類(lèi)型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-05-09
- 語(yǔ)言: C/C++
- 標(biāo)簽: 快速排序??樞軸元素??三者取中??數(shù)據(jù)結(jié)構(gòu)??
資源簡(jiǎn)介
輸入若干組長(zhǎng)度各異的待排序列,分別用快速排序算法和改進(jìn)的樞軸元素三者取中算法對(duì)待排序列進(jìn)行排序,當(dāng)待排子序列長(zhǎng)度已小于 20時(shí),改用直接插入排序,利用時(shí)間函數(shù)驗(yàn)證三者取中算法在效率上的提高。(提示: 待排序列的長(zhǎng)度一般應(yīng)為 10000 以上)
代碼片段和文件信息
#include???
#include
#include???
#define?SIZE?100000????
#define?MAX?32768
using?namespace?std;???
typedef?struct?element{???
????long?long?key;???
}Element;???
long?long?Random(long?long?seed)
{
return?(25173*seed+13849)%32768;
}
typedef?struct?BROCK{???
???Element?elem[SIZE+5];???
???long?long?length;?????????
}brock;???
void?insertsort(brock*L?long?long?lowlong?long?high);???
void?quicksort1(brock*L?long?long?lowlong?long?high);???
long?long?partition1(brock*L?long?long?lowlong?long?high);???
void?quicksort2(brock*L?long?long?lowlong?long?high);???
long?long?partition2(brock*L?long?long?lowlong?long?high);???
???
int?main()???
{???
????long?long?in;???
????brock?array_1array_2;?
????clock_t?start?finish;??
????double?duration;???
????
????array_1.length=SIZE;??
????array_2.length=SIZE;???
???????
????srand(time(NULL));????
????for(i=1;?i<=SIZE;?i++)???
????????array_1.elem[i].key=array_2.elem[i].key=Random(rand());??
?????????
????start=clock();???
????quicksort1(&array_11SIZE);
????finish=clock();????
????duration?=?(double)(finish?-?start)?/?CLOCKS_PER_SEC;???
????cout<<“普通快排時(shí)間“< ????????
???????
????start=clock();???
????quicksort2(&array_21SIZE);
????finish=clock();???
????duration=(double)(finish?-?start)?/?CLOCKS_PER_SEC;???
????cout<<“三者取中時(shí)間“< ???system(“pause“);???????????
}???
void?insertsort(brock*L?long?long?lowlong?long?high)?
{???
??long?long?ij;???
????for(i=low+1;i<=high;i++){???
???????if(L->elem[i].keyelem[i-1].key){???
??????????L->elem[0]=L->elem[i];???
??????????L->elem[i]=L->elem[i-1];???
??????????for??(j=i-2;L->elem[0].keyelem[j].key;j--)???
?????????????????L->elem[j+1]=L->elem[j];
?????????L->elem[j+1]=L->elem[0]?;
??????}???????
????}????????????
}???
long?long?partition1(brock*L?long?long?lowlong?long?high)
{???
???long?long?pivotkey;????
????pivotkey=L->elem[low].key;
????while(low
評(píng)論
共有 條評(píng)論