zoukankan      html  css  js  c++  java
  • 快速排序 Quick Sort

    快速排序是基于分治策略.
     
    步骤:
         1、分解:数组A[p..r]划分为两个子数组 A[p..q-1]和A[q+1.. r]。使得A[p..q-1]中元素都小于A[q],A[q+1.. r]中元素都大于A[q]。
         2、解决:递归调用快速排序,对数组 A[p..q-1]和A[q+1.. r]排序。
         3、合并:因为都是原地排序,所以不需要合并。整个数组A[p..r]已排序。
     
     
    QuickSort(A, p, r)
     1    if p<r
     2         q=Partition(A, p, r)
     3         QuickSort(A, p, q-1)
     4         QuickSort(A, q+1, r)
     
    快速排序的关键是Partition过程,它对数组A[p..r]进行原地重排。
     
    Partition(A, p, r)
    1     x=A[r]     //确定主元 pivot element 
    2     i=p-1
    3     for  j=p to r-1
    4          if A[j]<=x
    5               i=i+1
    6               exchange A[i] with A[j]     // A[p..i]都是小于等于A[r]的元素
    7     i=i+1
    8     exchange A[i] with A[r]
    9     return i
     
    分析:for循环过程中的四个区域:小于等于主元区域、大于主元区域、待扫描区域、主元

      

    随机化的版本:随机选择主元,使对数组的划分比较对称,以获得较好的平均性能。
    RandomizedPartition(A, p, r)
    1     i=Random(p,r)
    2     exchange A[i] with A[r]
    3     return Partition(A, p, r)
     
     
    运行时间
         对包含n个元素的数组,最坏情况运行时间为Θ(n2
         平均性能相当好:期望的运行时间为Θ(n lg n),且Θ(n lg n)记号中隐藏的常数因子很小。所以快速排序通常是用于排序的最佳选择。
     
     
     
  • 相关阅读:
    eclipse 批量 查询 替换
    Hibernate包及相关工具包下载地址
    逻辑运算符&& 用法解释
    主流数据库查找前几条数据的区别
    .propertie文件注释
    java.io.EOFException java.io.ObjectInputStream$PeekInputStream.readFully 错误
    数据库的名称尽量要以英文开头,如果全部输数字的话可能会出错的
    **和*的区别
    puTTY与SecureCRT的比较
    Windows下Redis的安装使用
  • 原文地址:https://www.cnblogs.com/windlaughing/p/3092777.html
Copyright © 2011-2022 走看看