当前位置:  编程技术>java/j2ee

快速排序的深入详解以及java实现

    来源: 互联网  发布时间:2014-10-26

    本文导语:  快速排序作为一种高效的排序算法被广泛应用,SUN的JDK中的Arrays.sort 方法用的就是快排。快排采用了经典的分治思想(divide and conquer):Divide:选取一个基元X(一般选取数组第一个元素),通过某种分区操作(partitioning)将数...

快速排序作为一种高效的排序算法被广泛应用,SUN的JDK中的Arrays.sort 方法用的就是快排。
快排采用了经典的分治思想(divide and conquer):

Divide:选取一个基元X(一般选取数组第一个元素),通过某种分区操作(partitioning)将数组划分为两个部分:左半部分小于等于X,右半部分大于等于X。
Conquer: 左右两个子数组递归地调用Divide过程。
Combine:快排作为就地排序算法(in place sort),不需要任何合并操作
可以看出快排的核心部分就是划分过程(partitioning),下面以一个实例来详细解释如何划分数组(图取自于《算法导论》)
初始化:选取基元P=2,就是数组首元素。i=1,j=i+1=2 (数组下标以1开头)
循环不变量:2~i之间的元素都小于或等于P,i+1~j之间的元素都大于或等于P

循环过程:j从2到n,考察j位置的元素,如果大于等于P,就继续循环。如果小于P,就将j位置的元素(不应该出现在i+1~j这个区间)和i+1位置(交换之后仍在i+1~j区间)的元素交换位置,同时将i+1.这样就维持了循环不变量(见上述循环不变量说明)。直到j=n,完成最后一次循环操作。
要注意的是在完成循环后,还需要将i位置的元素和数组首元素交换以满足我们最先设定的要求(对应图中的第i步)。

细心的读者可能会想到另一种更直白的分区方法,即将基元取出存在另一相同大小数组中,遇到比基元小的元素就存储在数组左半部分,遇到比基元大的元素就存储在数组右半部分。这样的操作复杂度也是线性的,即Theta(n)。但是空间复杂度提高了一倍。这也是快排就地排序的优势所在。

代码如下:

public class QuickSort {
    private static void QuickSort(int[] array,int start,int end)
    {
        if(start

    
 
 

您可能感兴趣的文章:

  • java map(HashMap TreeMap)用法:初始化,遍历和排序详解
  • oracle指定排序的方法详解
  • linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明
  • 深入Java冒泡排序与选择排序的区别详解
  • 深入IComparable与IComparer的排序实例详解
  • ASP.NET4 GridView的四种排序样式详解
  • C++实现数组的排序/插入重新排序/以及逆置操作详解
  • 内部排序之堆排序的实现详解
  • java如何对map进行排序详解(map集合的使用)
  • C语言实现排序算法之归并排序详解
  • C++快速排序的分析与优化详解
  • C++实现基数排序的方法详解
  • 深入单链表的快速排序详解
  • 解决JTable排序问题的方法详解
  • jquery 表格排序实例详解
  • 深入oracle特定信息排序的分析
  • 经典的委托排序(深入分析)
  • 深入理解堆排序及其分析
  • 深入C中常用的三种排序方法总结以及探讨分析
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Lists(链表) 成员 sort():给list排序
  • Java中的数组排序方式(快速排序、冒泡排序、选择排序)
  • STL vector+sort排序和multiset/multimap排序比较
  • 排序算法之PHP版快速排序、冒泡排序
  • <<大话数据结构>>中冒泡排序算法改进
  • php排序算法 PHP版快速排序与冒泡排序
  • java数组排序示例(冒泡排序、快速排序、希尔排序、选择排序)
  • 问题:DefaulTableModel是否有排序的功能,如果没有,jTable如何排序,我是从XML取数据到Table里。
  • java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
  • PHP快速排序小例子 php快速排序实现方法
  • C#排序算法之快速排序
  • 数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
  • python 算法 排序实现快速排序
  • python算法学习之桶排序算法实例(分块排序)
  • python计数排序和基数排序算法实例
  • C#中使用快速排序按文件创建时间将文件排序的源码
  • 用c语言实现冒泡排序,选择排序,快速排序
  • 常用排序算法整理分享(快速排序算法、希尔排序)
  • php数组随机排序示例
  • jQuery表格排序插件 tablesorter
  • 可视化算法排序过程 Sound of Sorting




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3