实现快排最优版本算法上机报告Word文件下载.docx

上传人:b****5 文档编号:21162012 上传时间:2023-01-28 格式:DOCX 页数:11 大小:67.23KB
下载 相关 举报
实现快排最优版本算法上机报告Word文件下载.docx_第1页
第1页 / 共11页
实现快排最优版本算法上机报告Word文件下载.docx_第2页
第2页 / 共11页
实现快排最优版本算法上机报告Word文件下载.docx_第3页
第3页 / 共11页
实现快排最优版本算法上机报告Word文件下载.docx_第4页
第4页 / 共11页
实现快排最优版本算法上机报告Word文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实现快排最优版本算法上机报告Word文件下载.docx

《实现快排最优版本算法上机报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《实现快排最优版本算法上机报告Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

实现快排最优版本算法上机报告Word文件下载.docx

三、算法伪代码

void_qsort(a,p,r,number)

ifp<

r

q=Partition(a,p,r,number)

_qsort(a,p,q-1,number)

_qsort(a,q+1,r,number)

intPartition(inta[],intp,intr,intnumber)

{

intx,temp;

if(number==1)

{

temp=p;

}

elseif(number==2)

temp=rand()%(r-p+1)+p;

elseif(number==3)

intb[5];

b[1]=rand()%(r-p+1)+p;

b[2]=rand()%(r-p+1)+p;

b[3]=rand()%(r-p+1)+p;

sort(b+1,b+4);

temp=b[2];

elseif(number==4)

intb[10];

b[4]=rand()%(r-p+1)+p;

b[5]=rand()%(r-p+1)+p;

sort(b+1,b+6);

temp=b[3];

else{

temp=p;

x=a[temp];

swap(a[temp],a[p]);

inti=r+1;

for(intj=r;

j>

p;

j--)

if(a[j]>

=x)

{

i--;

swap(a[i],a[j]);

swap(a[i-1],a[p]);

returni-1;

}

intmain()

intn,a[200000];

cout<

<

"

测试数据:

;

cin>

>

n;

for(inti=1;

i<

=n;

i++)

a[i]=random(51);

序列的顺序(1顺序;

2随机;

3逆序):

ints;

s;

if(s==3)

sort(a+1,a+1+n,greater<

int>

());

//对生成数进行排列

elseif(s==1)

sort(a+1,a+1+n);

elseif(s==2){

}

确定基数:

1,第一个数;

2,随机数;

3,3个随机数的中位数;

4,5个随机数的中位数:

intnumber;

number;

clock_tstart,end;

//计时

start=clock();

_qsort(a,1,n,number);

end=clock();

用时:

end-start<

ms"

endl;

cout<

a[i]<

"

return0;

四、算法分析

对数据进行快排,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

五、测试结果

1以第一个数为基数的排序时间,单位ms.

2以随机数为基数的排序时间,单位ms

3以三个随机数的中位数为基数的排序时间,单位ms

4以五个随机数的中位数为基数的排序时间,单位ms

(二)题目二

ImplementHoare’salgorithmandcompareitwithouralgorithminthetextbook.(体会有重复数据情况下,算法之间的优劣)。

Theinputisalsotakenform1000and10000(between0and50),andthetestsshouldbedoneontherandominput.Theruntimesmustbeplottedwithrespecttothesizestoillustratethedifference.(figureoutusingexcel,matlabintheReport)

实现Hoare快排算法,并和我们的快排算法相比较,即体会重复数据情况下,算法的优劣。

void_qsort(a,p,r)

ifp<

q=Hoare_Partition(a,p,r);

_qsort(a,p,q-1);

_qsort(a,q+1,r);

Hoare_Partition(a,p,r)

x=a[p]

i=p-1

j=r+1

while

(1)

j=j-1

ifa[j]=x

break

i=i+1

ifa[i]>

=x

ifi<

j

swap(a[i],a[j])

else

returnj

main()

intn,a[200000]

输入数据多少:

n

forinti=1i<

=ni=i+1

a[i]=random(51)

clock_tstart,end

start=clock()

_qsort(a,1,n)

end=clock()

运行时间:

endl

forinti=1i<

cout<

return0

相较原本算法,对Partition部分进行改变,原算法中,主元是与它所划分的两个分区分离的,而Hoare_Partition中主元是存在于两分区中的。

(三)题目三

Implementquicksortalgorithmusingtailrecursionandcompareitwiththeoriginalquicksortalgorithm.

Theinputisalsotakenform20000and100000(between0and50),andthetestsshouldbedoneontherandominput.Theruntimesmustbeplottedwithrespecttothesizestoillustratethedifference.(figureoutusingexcel,matlabintheReport)

用尾递归实现快排,并和普通快排相比较,输入规模在1000-10000,用运行时间和规模建立关系来显示不同。

voidTail_qsort(a,p,r)

whilep<

q=Partition(a,p,r)

Tail_qsort(a,p,q-1)

p=q+1

Partition(a,p,r)

x=a[p]

i=r+1

forintj=rj>

pj=j-1

ifa[j]>

i=i-1

swap(a[i],a[j])

swap(a[i-1],a[p])

returni-1

main()

start=clock()

Tail_qsort(a,1,n)

fori=1i<

采用循环控制结构,用尾递归替换原算法中的第二个递归。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 交通运输

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1