分治算法实验(用分治法实现快速排序算法)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法分析与设计实验报告第四次附加实验
while (a[--j]>x); if (i>=j)
{
break;
}
Swap(a[i],a[j]);
}
a[p] = a[j]; //将基准元素放在合适的位置
a[j] = x;
return j;
}
//通过RandomizedPartition函数来产生随机的划分 template vclass
Type>
int RandomizedPartition(Type a[], int p, int r) {
int i = Random(p,r);
Swap(a[i],a[p]);
return Partition(a,p,r);
}
较小个数排序序列的结果:
测试结果
较大个数排序序列的结果:
实验心得
快速排序在之前的数据结构中也是学过的,在几大排序算法中,快速排序和归并排序尤其是
重中之重,之前的快速排序都是给定确定的轴值,所以存在一些极端的情况使得时间复杂度
很高,排序的效果并不是很好,现在学习的一种利用随机化的快速排序算法,通过随机的确
定轴值,从而可以期望划分是较对称
的,减少了出现极端情况的次数,使得排序的效率挺高了很多,
化算法想呼应,而且关键的是对于随机生成函数,通过这一次的
学习终于弄明白是怎么回事了,不错。
与后面的随机实
验和自己的
实验得分助教签名
附录:
完整代码(分治法)
//随机后标记元素后的快速排序
#i nclude
#in elude
#inelude
template < class Type>
void S &x,Type &y); // 声明swap函数
inline int Random(int x, int y); // 声明内联函数
template < class Type>
int Partition(Type a[], int p, int r); // 声明 Partition 函数template
int RandomizedPartition(Type a[], int p, int r); // 声明 RandomizedPartition 函数
int a[1000000]; //定义全局变量用来存放要查找的数组
更大个数排序序列的结果:
template < class Type>
void RandomizedQuickSort(Type a[], int p, int r); // 声明 RandomizedQuickSort 函数
void ran( int *input, int n) // 随机生成数组元素函数{
int i;
srand(time(0));
for (i=0;i } int main() { int n; cout<< "请输入要排序的序列个数: " < for (int i=0; i