算法导论 改进快排(2)----针对相同元素值 7.2
来源:互联网 发布:淘宝的hottoys有假货吗 编辑:程序博客网 时间:2024/05/20 21:18
问题:序列中有较多相同元素值时,随机化快排的性能下降
思路:PARTION将序列分为三个部分A(p,q,t,r),A[p,...,q-1]中元素都小于A[q],A[q,...,t]中元素都相等,A[t+1,...,r]中元素都大于A[q]。QUICKSORT只对分区内互不相同的元素才做递 归。
代码:
#include<iostream>#include<stdlib.h>#include<time.h>using namespace std;void Swap(int &a, int &b)//交换两个数的函数{int temp=b;b=a;a=temp;}int* New_Partition(int *A, int p, int r) //新的分区函数 { int *index=new int[2];int k=rand()%(r-p+1)+p;//随机化快排Swap(A[k],A[r]);int i=p-1;for(int j=p;j<r;j++) //把比主元小的元素都排到前面{if (A[j]<A[r]){++i;Swap(A[i],A[j]);}}index[0]=i+1;//记录相等元素开始的下标for(int l=i+1;l<r;l++)//再把和主元相等的元素排到中间{if (A[l]==A[r]){++i;Swap(A[l],A[i]);}}index[1]=i+1;//记录相等元素结束的下标Swap(A[i+1],A[r]);return index;} void QuickSort(int *A, int p, int r) { if(p < r) { int *new_index= New_Partition(A, p, r); QuickSort(A, p, new_index[0]-1); QuickSort(A, new_index[1]+1, r);delete [] new_index; } } int main(){int A[9]={2,1,3,5,8,4,1,4,4};for(int m=0;m<=8;m++)cout<<A[m]<<" ";cout<<endl;srand((unsigned)time(NULL));QuickSort(A,0,8);for(int n=0;n<=8;n++)cout<<A[n]<<" ";cout<<endl;return 0;}
0 0
- 算法导论 改进快排(2)----针对相同元素值 7.2
- 算法导论7-2,针对相同元素的快速排序
- 算法导论-7-2 针对有相同元素值的快速排序
- 算法导论--->快排
- 算法导论 改进快排(1)----几乎有序的序列 7.4-5
- 算法导论 改进快排(3)---栈深度 习题7-4
- 算法导论快排实现(C++)
- 算法导论第七章思考题7-2针对相同元素的快速排序-c++
- 快排的改进算法
- 算法导论之快排
- 快排之算法导论
- 快排改进(快排+插入)
- 算法导论(一):快速排序与随机化快排
- 实现《算法导论》里的快排
- 算法导论-------------快排的研究
- (p106)对区间的模糊排序(将相同元素挤在一起的快排)
- 快排改进
- 改进快排
- 关于DoG角点检测matlab实现
- 史上最详细的八个皇后算法解析【php版本】
- list的遍历与删除
- struts2 标签的使用之一 s:if
- 函数调用过程探究
- 算法导论 改进快排(2)----针对相同元素值 7.2
- 关于中国象棋对弈程序ElephantEye(象眼)
- Hibernate核心接口和工作原理
- Android 系统引导过程
- vs2010中的ipch文件夹和sdf文件
- 第几周【项目5-方程也是类】
- 使用 screen 管理你的远程会话
- jquery遍历json与数组方法总结each()
- 【Linux】Centos python2.6升级后yum和ibus的配置