说在前面的话


  平常码砖的时候,对于一个数组进行排序更多的是起泡排序,起泡排序对于一般不是很长的数组进行操作没什么问题,一旦数组过大,很明显效率低。

而快排是对起泡排序的一种改进,效率明显优高。

快排思路


  快排的思想是通过每一次排序将待排的数组分成两部分,左边的部分所有值均小于右边部分,然后再对这两部分分别再进行排序以达到整修序列有序。

Example:

有如下一个无序的序列 arr[](长度为10),现在要对其进行快排

| 10 | 9 | 22 | 38 | 47 | 7 | 11 | 2 | 82 | 1 |

1.首先要先任一个记录作为枢轴(也可称为支点),然后将其它的记录与期进行对比,比枢轴小的记录放左边,

  比枢轴大的记录放右边通常我们选取序列的第一个记录作为枢轴。

     | | 9 | 22 | 38 | 47 | 7 | 11 | 2 | 82 | 1 |

  将arr[0]=10 作为枢轴

  

  2.接下来将各记录与其进行对比,关键是如何将各记录与枢轴进行对比,这里涉及到一个小的技巧,挖坑填坑!

  将枢轴赋给一个临时的变量,挖一个坑,寻找一个比枢轴小的值来填此坑:

   int tmp = arr[0]

  |    | 9 | 22 | 38 | 47 | 7 | 11 | 2 | 82 | 1 |

  3. 寻找比枢轴小的值可以有几种方法,但是否都能行得通?我们来分析下

    a. 如果先按从左到右的顺序进行寻找,经过一次排序后,序列如下:

|    | 9 | 22 | 38 | 47 | 7 | 11 | 2 | 82 | 1 |

    | |    | 22 | 38 | 47 | 7 | 11 | 2 | 82 | 1 |

      | 9 | | 22 | 38 | 47 |    | 11 | 2 | 82 | 1 |

| 9 | 7 | 22 | 38 | 47 | | 11 |    | 82 | 1 |

   | 9 | 7 | 22 | 38 | 47 | 2 | 11 | | 82 | |

现在的情况是,比枢轴10小的记录确实已经排到了枢轴的左边,但你有办法将比10大的记录都排右边吗?

    有吗? 好像没有吧...

如果,再把末尾的10挖出个坑来,让大的数来填,最后你发现,大的记录确实到了枢轴的右边,但小的记录又分布枢轴两边...

所以无论是一开始从右向左或者是从左向边一口气的排序并不能解决我们的问题... Game over!

    

    b.作为人人敬仰的聪明小一休会坐下来静下心,迪迪哇哇迪迪哇哇三秒钟,脑洞大开,又有一方法:

我们轮流从头尾拿记录与枢轴进行对比进行交换,情况会如何?

|    | 9 | 22 | 38 | 47 | 7 | 11 | 2 | 82 | 1 |

| | 9 | 22 | 38 | 47 | 7 | 11 | 2 | 82 |    |

| 1 | 9 |     | 38 | 47 | 7 | 11 | 2 | 82 | |

| 1 | 9 |  | 38 | 47 | 7 | 11 |    | 82 | 22|

| 1 | 9 |  2 |     | 47 | 7 | 11 | | 82 | 22|

| 1 | 9 |  2 |  | 47 |    | 11 | 38| 82 | 22|

| 1 | 9 |  2 |  7 |     | | 11 | 38| 82 | 22|

| 1 | 9 |  2 |  7 | | 47| 11 | 38| 82 | 22|

  经过轮流头尾记录与枢轴进行对比交换后,达到了我们的预期序列,开不开森呐?

将下来只是递归的问题了,对枢轴左右两部分再次进行以上步骤,即可将此序列有序

The following code will tell us who they are!


public class QuickSort{

public static void quickSortMethodA(int arr[], int startPos, int endPos){ if(startPos >= endPos) return; int tmp = arr[startPos]; int i = startPos; int j = endPos; while(i < j){ while(i < j && arr[j] > tmp){ j--;
} if(i < j){ arr[i++] = arr[j];
} while(i < j && arr[i] < tmp){ i++;
} if(i < j){ arr[j--] = arr[i];
}
} arr[i] = tmp; quickSortMethodA(arr, startPos,i-1); quickSortMethodA(arr, i+1, endPos); }     
}

对比算法


上面我们用快排的思想写了一个quickSortMethodA()方法,这个快排到底有多快,没有参照物肯定是感受不到的,那么我们写一个起泡排序quickSortMethodB()方法。

    public static void quickSortMethodB(int arr[]){

        for (int i=0; i<arrayLength; i++){

            for (int j=i; j<arrayLength;j++){

                if(arr[i] > arr[j]){

                    int temp = arr[i];

                    arr[i] = arr[j];

                    arr[j] = temp;
}
}
} }

然后我们在QuickSort这个类下面写一个单元测试:

public class QuickSort{

   private static int arrLength = 100000;

    private static int[] arr = new int[arrLength];        

   public static void main(String[] args){       

         for(int i=0; i<arrLength; i++){
arr[i] = (int) Math.ceil(Math.rand()*arrLength);
}    //How long will it take us ?           
long startTimeForA = System.currentTimeMillis(); quickSortMethodA(arr,0,arrLength);       System.out.println(System.currentTimeMillis()-startTimeForA); System.out.println(); long startTimeForB = System.currentTimeMillis(); quickSortMethodB(arr);       System.out.println(System.currentTimeMillis()-startTimeForB);     } }

然后运行下看下结果:

aaarticlea/png;base64,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" alt="" />

是不是很开森? 我们的快排对一个长度为10W的数组排序用了27毫秒,而起泡排序用了4407毫秒! 差距显然...

分析算法


  通过对比,我们是不是应该寻根问底的了解下这两种算法的时间复杂度T(n) ?

不应该?  好吧.... 你可以撤了。Game over.

  我们来分析下快排的时间复杂度问题...

对某个长度为n的序列进行排序所需时间T(n) =Tsort(n) + T(i-1) + T(n-i)

其中 Tsort(n)  是对n个记录进行一次快排所需要的时间,而T(i-1) 、T(n-i)分别表示对长度为[1,i-1]、[i+1,n]序列所花时间

对某长度为n的序列,进行排序所需要的时间Tsort(n) 由我们的quickSortMethodA()方法可知,与某一常量成正比,即Tsort(n)=cn

因序列中记录是随机分布,所以枢轴 i 为序列作[1,n]中任一记录的概率相同,刚快排所需时间平均值为:

  aaarticlea/png;base64,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" alt="" />  => aaarticlea/png;base64,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" alt="" />

  Tavg(n) = (n+1)/n(Tavg(n-1)) + (2n-1)c/n < (n+1)Tavg(1)/2  + 2(n+1)(1/2+1/3+...+1/n+1)c  < (n+1)ln(n+1)

所以对于一个序列长度为n进行快排 时间复杂度大概为 Tn = O(nlogn)

面对于起泡排序,将每个数都要与后面的数进行对比,Tn = O(n*n)

【算法】快速排序-Java版的更多相关文章

  1. [JsonSchema] 关于接口测试 Json 格式比对核心算法实现 (Java 版)

    引言 为什么要自己重新造轮子,而不是采用第三方的JsonSchema方法进行实现存在以下痛点:1.我之前在网上找了很久,没有找到java版直接进行jsonschema生成的方法或直接比较的方法2.ht ...

  2. 基本排序算法——快速排序java实现

    简单的快速排序算法,我竟然花费了如此多的时间来写作,好好学习. /** * */ package basic.sort; import java.util.Arrays; import java.ut ...

  3. 排序算法(java版)

    一直想理解一下基本的排序算法,最近正好在搞java所以就一并了(为了便于理解,这儿都是以从小到大排序为目的) 冒泡排序 也就是比较连续的两个值,如果前面一个值大于后面一个值,则交换. 时间复杂度为O( ...

  4. Twitter的分布式自增ID算法snowflake (Java版)

    概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种 ...

  5. 高效率的全组合算法(Java版实现)

    博客上看到的一个算法,用Java实现了一个 算法描述: 算法说明:当n大于2时,n个数的全组合一共有(2^n)-1种. 当对n个元素进行全组合的时候,可以用一个n位的二进制数表示取法. 1表示在该位取 ...

  6. 面试常用算法总结——排序算法(java版)

    排序算法 重要性不言而喻,很多算法问题往往选择一个好的排序算法往往问题可以迎刃而解 1.冒泡算法 冒泡排序(Bubble Sort)也是一种简单直观的排序算法.它重复地走访过要排序的数列,一次比较两个 ...

  7. 排序算法----快速排序java

    快速排序是对冒泡排序的一种改进,平均时间复杂度是O(nlogn) import java.util.Arrays; import java.util.Scanner; public class tes ...

  8. 分布式自增ID算法snowflake (Java版)

    概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种 ...

  9. 数据结构和算法(Java版)快速学习(线性表)

    线性表的基本特征: 第一个数据元素没有前驱元素: 最后一个数据元素没有后继元素: 其余每个数据元素只有一个前驱元素和一个后继元素. 线性表按物理存储结构的不同可分为顺序表(顺序存储)和链表(链式存储) ...

随机推荐

  1. nyoj 757 期末考试【优先队列+贪心】

    期末考试 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没 交作业就会扣 ...

  2. ASP.NET- Web.Config配置大文件上传

    在web.config中的<system.web></system.web>内加入如下代码: <httpRuntime executionTimeout="60 ...

  3. Chrome/Chromium HTML5 video 视频播放硬件加速

    Chromium站点上有个大致的框图.描写叙述了Chromium的video在各个平台 - 包含Android - 上是怎样使用硬件资源来做视频编解码加速的: 而依据Android Kitkat上的C ...

  4. 【ThinkingInC++】65、使用delete void*可能会出错

    /** * 书本:[ThinkingInC++] * 功能:使用delete void*可能会出错 * 时间:2014年10月5日14:31:43 * 作者:cutter_point */ #incl ...

  5. resin 4.0数据源的配置

    在resin 的conf 文件下有resin.xml  我们在这里能够配置数据源以及配置项目 一.配置多个数据源,多个项目共享这些数据源.也就是这些数据源配置在<host>   </ ...

  6. SSH服务

    基于Linux的服务器有多个网卡,其中一个网卡连接了网线,通过该网线链接了个人PC.PC上启动Vmware虚拟机,启动ubuntu系统.然后设置PC的网络为自动获取IP,在PC的Linux的Ubunt ...

  7. CPP: 跨平台生成GUID/UUID

    #ifndef XGUID_H#define XGUID_H #include <string>#include <stdio.h>#ifdef WIN32#include & ...

  8. spring core源码解读之ASM4用户手册翻译之一asm简介

    第一章:ASM介绍 1.1 ASM动机: 程序的分析,生成,转换技术可以应用到许多场景: 1.程序分析,从简单的语法解析到完整的语义分析,可以应用在程序中找到潜在的bug,发现无用的代码,工程代码的逆 ...

  9. WTL 自定义 Button类-自绘

    WTL 自绘Button类,支持按钮三种形态,正常模式,hover模式,鼠标按下模式,支持png图片.使用方法很简单: MyButton* pButton = new MyButton;   pBut ...

  10. CGI初识

    ---恢复内容开始--- 转自http://www.moon-soft.com/program/bbs/readelite887957.htm 用 C/C++ 写 CGI 程序 小传(zhcharle ...