Quick の implementation


  快排,就像它的名字一定,风一样的快。基本上算是最快的排序算法了。快排的基本思想是选择一个切分的元素。把这个元素排序了。所有这个元素左边的元素都小于这个元素,所有这个元素右边的元素都大于这个元素。接着再把左右2个数组分别排序。

  假设你有如下数组 (所有 i  左边的对象都小于 切分对象。 所有 j  右边的对象都大于切分对象 这句话稍后有用 先知道一下)

  

  首先,我们把index = 0 的元素当作切分元素。

  从index = 1 的位置开始,找到第一个大于49的元素。发现65 大于 49 所以标记一下 i = 2

  

  接着从数组的末尾开始找第一个小于49的,发现 index = 6 的时候,value = 27 小于 49 所以mark一下

  

  现在交换i 和 j 的元素。

  

  交换之后,元素又符合刚才的定义了(所有 i  左边的对象都小于 切分对象 因为i会继续向右边寻找元素,所有现在i位置的元素必须要小于切分元素, 要不然就不符合定义 i 左边的元素都小于 切分元素)  并且 (所有 j  右边的对象都大于切分对象)

  所以可以接着往下走

  继续从i = 2的位置开始 找到 大于49的元素,找到了 i = 3的时候value = 97

  

  继续从右边开始找 发现 j = 5 的时候13 小于49 

  

  交换位置

  

  现在 i 继续前进 。停止在 index = 4 的位置, 76 大于 49

  

  j 也继续从右边往左边找。当j = 3 value = 13 小于49 

  

  i >= j 所以不用交换位置。 这个时候需要把切分元素和 j 位置的元素交换位置

  

  这个时候 index = 3 的位置就已经是排好的位置了。 49 的右边的元素都 大于49 , 49 左边的元素都小于49

  接着就可以排序 0 - 3 的元素 和 4 到 7 的元素了。

  盗一张图帮忙理解

  

  具体的实现https://github.com/Cheemion/algorithms/blob/master/src/com/algorithms/sort/QuickSort.java

  有讲不清楚的地方,希望可以给我留言。因为感觉自己写博客并不是很很好。嘎嘎

  

  

  

排序--QuickSort 快排的更多相关文章

  1. 排序 之 快排、归并、插入 - <时间复杂度>----掌握思想和过程

    俗话说:天下武功无坚不破,唯快不破.对于算法当然也是要使用时间最短.占用空间最小的算法来实现了. 注意:我代码里面打的备注仅供参考,建议不要背模板(因为没有固定的模板),可以写一个数列按着代码跑两圈或 ...

  2. c语言中使用自带的qsort(结构体排序)+ 快排

    c中没有自带的sort函数emm 不过有自带的qsort函数 (其实用法都差不多(只是我经常以为c中有sort 头文件要用 #include <stdlib.h> 一定要重新把指针指向的值 ...

  3. Java 排序(快排,归并)

    Java 排序有Java.util.Arrays的sort方法,具体查看JDK API(一般都是用快排实现的,有的是用归并) package yxy; import java.util.Arrays; ...

  4. 排序之快排(JS)

    快速排序(Quicksort)是对冒泡排序的一种改进. 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分 ...

  5. QuickSort(快排)的JAVA实现

    QuickSort的JAVA实现 这是一篇算法课程的复习笔记 用JAVA对快排又实现了一遍. 先实现的是那个easy版的,每次选的排序轴都是数组的最后一个: package com.algorithm ...

  6. 普林斯顿大学算法课 Algorithm Part I Week 3 重复元素排序 - 三路快排 Duplicate Keys

    很多时候排序是为了对数据进行归类,这种排序重复值特别多 通过年龄统计人口 删除邮件列表里的重复邮件 通过大学对求职者进行排序 若使用普通的快排对重复数据进行排序,会造成N^2复杂度,但是归并排序和三路 ...

  7. 【js基础】js排序方法——快排+堆排+插排+选择排

    快排 Array.prototype.fastSort = function(){ var arr = this; function sort(left, right, arr){ if( left ...

  8. quicksort快排

    废话不多说,上代码: void quicksort(int x[], int lo, int hi){ int i = lo, j = hi; ]; while(i <= j){ while(x ...

  9. 使用Python完成排序(快排法、归并法)

    class Sort(object): def quick_sort(self, ls): self.quick_sort_helper(ls, 0, len(ls) - 1) return ls d ...

随机推荐

  1. c++ 从vector扩容看noexcept应用场景

    c++11提供了关键字noexcept,用来指明某个函数无法--或不打算--抛出异常: void foo() noexcept; // a function specified as will nev ...

  2. 记elementUI一个大坑

    1.  表格中 用v-if 切换不同表字段时  表头字段顺序经常互换 解决方法:在table-column中加入:key="Math.random()"2. v-if控制的el-t ...

  3. 【SpringBoot】13. logback日志记录

    logback日志记录 Spring Boot 1.5.19.RELEASE 1.导入相关jar包 在spring-boot-starter-web 中已经包含 2.添加logback.xml配置文件 ...

  4. Python基本数据类型与数据结构(数据挖掘学习)

    前言 最近工作和研究涉及到数据挖掘和机器学习,出于归纳和总结知识的目的写下这一系列的文章,这一系列文章将会包括Python的基本数据类型和数据结构,函数和面向对象相关的知识,然后会介绍数据挖掘和机器学 ...

  5. 对ESP8266的例子进行编译时报错check_python_dependencies的问题的解决

    尝试对ESP8266的例子进行编译时报错: make: *** 没有规则可制作目标"check_python_dependencies" 解决方法: 1.安装python pip包 ...

  6. 关于情感分类(Sentiment Classification)的文献整理

    最近对NLP中情感分类子方向的研究有些兴趣,在此整理下个人阅读的笔记(持续更新中): 1. Thumbs up? Sentiment classification using machine lear ...

  7. 451. Sort Characters By Frequency(桶排序)

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  8. MYSQL 存储引擎(面)

    存储引擎是MySQL的组件,用于处理不同表类型的SQL操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能. 使用哪一种引擎可以灵活选择,一个数据 ...

  9. sql 训练及总结

    1.sql语句中=与in的区别,=是指一对一之间的等于,而in是指一对多之间的:同样的道理,<>与 not in的区别,<>是指一对一之间的不等于,而not  in是指一对多之 ...

  10. ubuntu掉电出现检查文件系统的问题

    修改: /etc/default/rcS FSCKFIX=no 为 FSCKFIX=yes 出现这个情况的原因是硬件时钟偏移了 显示上次挂载根目录在未来时间. 写于: 2013年11月28日 更新于: ...