第7章:快速排序

原创 2016年05月30日 20:30:00

随机化快速排序:

1:对数组的随机划分:

int random(int i,int j)
{
        return rand()%(j-i+1)+i;
}

template<class Type>
int partition(vector<Type>& array, int left,int right)
{
        Type compareVal=array[right];

        int i=left-1;
        for(int j=left;j!=right;++j)
                if(array[j]<=compareVal){
                        ++i;
                        swap(array[i],array[j]);
                }
        swap(array[i+1],array[right]);

        return i+1;
}

template<class Type>
int randomPartition(vector<Type>& array,int left,int right)
{
        int pivotPosition=random(left,right);
        swap(array[pivotPosition],array[right]);
        return partition(array,left,right);
}

2:快速排序:

template<class Type>
void quickSort(vector<Type>& array,int left,int right)
{
        if(left<right){
                if(20<right-left){
                        int breakPoint=randomPartition(array,left,right);
                        quickSort(array,left,breakPoint-1);
                        quickSort(array,breakPoint+1,right);
                }
                else
                        insertionSort(array,left,right);
        }
}

template<class Type>
void quickSort(vector<Type>& array)
{
        if(array.size()==0)
                throw underflow_error("the array is empty.Please enter again");

        if(array.size()==1)
                return;

        quickSort(array,0,array.size()-1);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

算法导论 第7章 快速排序

一、概念 快速排序是基于分治模式的,选择一个数作为主元,经过一遍扫描,所有小于主元的数放在主元的左边,大于主元的数放在主元的右边,这样就划分成了两组数据。然后对两组数分别进行快排。 快排的运行时间与划...

算法导论代码 第7章 快速排序

第7章 快速排序 7.1 快速排序的描述 #include #include #include #include void swap(void *a, void *b, size_t el...

算法导论学习笔记 第7章 快速排序

对于包含n个数的输入数组来说,快速排序是一种时间复杂度为O(n^2)的排序算法。虽然最环情况的复杂度高,但是快速排序通常是实际应用排序中最好的选择,因为快排的平均性能非常好:它的期望复杂度是O(nlg...

算法导论-第7章 - 快速排序

普通快速排序 7.1  >

快速排序代码

  • 2016年06月14日 14:08
  • 2KB
  • 下载

简单的快速排序

  • 2015年01月23日 09:57
  • 479B
  • 下载

快速排序[平均时间复杂度O(NlogN)]

基本思想: 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这10个数进行排序。首先在这个序列中随便找一个数作为基准数。为了方便,就让第一个数6作为基准数。分别从初始序列“6 1 2 7 9...

快速排序算法

  • 2015年05月01日 16:41
  • 1KB
  • 下载

C#快速排序练习

  • 2017年06月20日 11:40
  • 30KB
  • 下载

算法导论 - QuickSort 快速排序 C++实现

算法导论的快速排序还和一般书上的快速排序是有点不一样的。 当然书习题也给出了一般快速排序的方法,其分区函数学名叫Hoare partition。 书本介绍的排序可以用图看的很清晰: 然后配合C++...
  • kenden23
  • kenden23
  • 2013年11月09日 10:32
  • 12957
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第7章:快速排序
举报原因:
原因补充:

(最多只允许输入30个字)