第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章快速排序

快速排序的思想 : 分治:  1.分解:将数组分解为2个数组 左部分小于a[q],右部分大于a[q],注意在划分过程中 需要计算key  a[q]的下标,由于划分特性,在所有元素都相等 或者原数组...
  • llxxlx1990
  • llxxlx1990
  • 2014年04月26日 22:04
  • 227

快速排序算法(第7章)

/********************************************************   *  函数名: int PARTITION(int A[],int p,int...
  • u012102997
  • u012102997
  • 2014年04月22日 15:42
  • 241

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

普通快速排序 7.1  >
  • u012796139
  • u012796139
  • 2014年09月28日 10:42
  • 813

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

快速排序
  • u013077167
  • u013077167
  • 2014年09月29日 20:39
  • 233

算法导论 第7章 快速排序

算法导论 第7章 快速排序 快速排序 是一种最坏情况时间复杂度Θ(n2),但平均时间复杂度Θ(nlgn)的排序算法,且Θ(nlgn)中隐含的常数因子非常小。它还能进行原址排序,占用空间小,所以在实际...
  • super_chicken
  • super_chicken
  • 2018年01月15日 09:28
  • 3

算法导论 第7章 快速排序

快速排序在最坏情况下的时间复杂度为O(n^2),虽然在最坏情况下运行时间比较差,但是快速排序通常是用于排序的最佳选择,因为其平均性能相当好,期望的运行时间为O(nlgn),且在O(nlgn)的记号中隐...
  • LucienDuan
  • LucienDuan
  • 2014年08月10日 14:13
  • 847

【算法导论 第7章 快速排序】

一、快速排序算法的基本特性 时间复杂度:O(n*lgn) 最坏:O(n^2) 空间复杂度:O(n*lgn) 不稳定。 快速排序是一种排序算法,对包含n个数的输入数组,平均时间为O(nlgn),最坏情况...
  • gzw1623231307
  • gzw1623231307
  • 2017年02月22日 07:06
  • 50

算法系列(四)排序算法中篇--归并排序和快速排序

在算法系列(三)排序算法上篇 一文中,介绍了冒泡排序,插入排序和选择排序算法。这篇文章继续讲解排序算法。 概述 冒泡排序,插入排序和选择排序算法这些算法的时间复杂度都是O(N^2),是否有更高效的排序...
  • robertcpp
  • robertcpp
  • 2016年05月30日 23:04
  • 3143

快速排序的改进

快速排序的改进 快速排序最坏情况下,要比较O(n^2)次,但平均性能为nlogn,基本达到了比较类排序所需时间的的下界。核心代码为: void qSort(int *data, int begin...
  • u013861473
  • u013861473
  • 2014年05月28日 22:24
  • 1222

结合题目讲解“快速排序算法”

根据一道快速排序算法自考题,进行学习方法上的反思,同时讲解自己对快速排序算法的理解...
  • sun15732621550
  • sun15732621550
  • 2016年10月16日 16:44
  • 2289
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第7章:快速排序
举报原因:
原因补充:

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