算法导论习题7-4—快排中堆栈深度的优化
2012-07-02 20:01
441 查看
//Quick_sort
//timecomplexityisnlgn
//thewayisfindanelement,andpartitionthearrayaccordingtothiselement
#include<iostream>
usingnamespacestd;
intPartition(inta[],intp,intr)
{
intnum=a[r];
inti=p-1;
intj,temp;
//partitionthearrayaccordingtonum
for(j=p;j<=r-1;j++)
{
if(a[j]<num)
{
i+=1;
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
//Insertthenumbetweenthepartion
temp=a[r];
a[r]=a[i+1];
a[i+1]=temp;
//returnthepartitionboundray
returni+1;
}
//RandomizedPartition,inthisfunctionwerandomselect
//theelementinarray,andexchangeitwiththelaseelementinarray
//thetargetislowdowntheaveragetimecomplexity!
intRandomizedPartition(inta[],intp,intr)
{
//generateibetweenpandr
inti=rand()%(r+1-p)+p;
inttemp;
temp=a[i];
a[i]=a[r];
a[r]=temp;
returnPartition(a,p,r);
}
//recursivecallsQuickSorttocpmplatethesort
voidQuickSort(inta[],intp,intr)
{
intq;
if(p<r)
{
q=RandomizedPartition(a,p,r);
QuickSort(a,p,q-1);
QuickSort(a,q+1,r);
}
}
//tailrecursiveQuickSort
//thedeapthoftheheapduetotherunofrecursiveQuickSortislgn
//直觉上每次partition如果都能对半划分,则递归的堆栈深度为lgn
//但是这种情况为理想状态,我们可以每次都挑出划分的子数组中较短的进行递归的QuickSort
//剩下的另一半用循环来处理。
voidTRQuickSort(inta[],intp,intr)
{
intq;
while(p<r)
{
q=RandomizedPartition(a,p,r);
if((q-p)<(r-q))
{
TRQuickSort(a,p,q-1);
p=q+1;
}
else
{
TRQuickSort(a,q+1,r);
r=q-1;
}
}
}
intmain()
{
intarr[10]={5,2,3,6,1,7,6,9,5,10};
TRQuickSort(arr,0,9);
inti;
for(i=0;i<10;i++)
{
cout<<arr[i]<<"";
}
cout<<endl;
return0;
}
优化的尾递归使得快速排序的堆栈深度为lgn。
相关文章推荐
- 算法导论7-4思考题-快速排序中的堆栈深度-尾递归技术
- 算法导论 改进快排(3)---栈深度 习题7-4
- 算法导论8-3(b)习题解答(trie树)
- 算法导论8-4习题解答
- 算法导论9.3-7习题解答
- 旅游网站推广:百度竞价深度优化技巧助您一臂之力
- 算法导论第三版 课后习题4.2-7
- 深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
- 深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
- 【深度学习】深度学习中监督优化入门(A Primer on Supervised Optimization for Deep Learning)
- 算法导论课后习题第二章(1)
- 《算法导论》笔记(10)贪心算法 部分习题
- 【工作笔记0009】VS异常:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。
- 深度学习之momentum,RMSprop,Adam优化算法
- 异常:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。
- 《算法导论》笔记(15) 最小生成树 部分习题
- 算法导论习题自做2.2-2
- 深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
- Android 6.0 新特性剖析【深度优化内存机制"秒杀"IOS系统】