排序--QuickSort 快排
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 快排的更多相关文章
- 排序 之 快排、归并、插入 - <时间复杂度>----掌握思想和过程
俗话说:天下武功无坚不破,唯快不破.对于算法当然也是要使用时间最短.占用空间最小的算法来实现了. 注意:我代码里面打的备注仅供参考,建议不要背模板(因为没有固定的模板),可以写一个数列按着代码跑两圈或 ...
- c语言中使用自带的qsort(结构体排序)+ 快排
c中没有自带的sort函数emm 不过有自带的qsort函数 (其实用法都差不多(只是我经常以为c中有sort 头文件要用 #include <stdlib.h> 一定要重新把指针指向的值 ...
- Java 排序(快排,归并)
Java 排序有Java.util.Arrays的sort方法,具体查看JDK API(一般都是用快排实现的,有的是用归并) package yxy; import java.util.Arrays; ...
- 排序之快排(JS)
快速排序(Quicksort)是对冒泡排序的一种改进. 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分 ...
- QuickSort(快排)的JAVA实现
QuickSort的JAVA实现 这是一篇算法课程的复习笔记 用JAVA对快排又实现了一遍. 先实现的是那个easy版的,每次选的排序轴都是数组的最后一个: package com.algorithm ...
- 普林斯顿大学算法课 Algorithm Part I Week 3 重复元素排序 - 三路快排 Duplicate Keys
很多时候排序是为了对数据进行归类,这种排序重复值特别多 通过年龄统计人口 删除邮件列表里的重复邮件 通过大学对求职者进行排序 若使用普通的快排对重复数据进行排序,会造成N^2复杂度,但是归并排序和三路 ...
- 【js基础】js排序方法——快排+堆排+插排+选择排
快排 Array.prototype.fastSort = function(){ var arr = this; function sort(left, right, arr){ if( left ...
- quicksort快排
废话不多说,上代码: void quicksort(int x[], int lo, int hi){ int i = lo, j = hi; ]; while(i <= j){ while(x ...
- 使用Python完成排序(快排法、归并法)
class Sort(object): def quick_sort(self, ls): self.quick_sort_helper(ls, 0, len(ls) - 1) return ls d ...
随机推荐
- 红帽6.9搭建yum源的2种方式(HTTP和本地)
方式一:HTTP搭建 1.首先删除本身所带的yum `rpm -qa | grep yum | xargs rpm -e --nodeps ` #忽略依赖关系,强行删除 若出现 错误出现 将后面的 ...
- mac os 10.15安装jdk 1.6
1.如果出现报错 已经安装了最高版本 下载请看:https://www.jianshu.com/p/3b580c405c7c 请看下面方法处理错误 1.在mac的访达中 找到 "脚本编辑器& ...
- php映射echarts柱状图
多种样式柱状图 前台部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- [阿里DIN]从模型源码梳理TensorFlow的形状相关操作
[阿里DIN]从模型源码梳理TensorFlow的形状相关操作 目录 [阿里DIN]从模型源码梳理TensorFlow的形状相关操作 0x00 摘要 0x01 reduce_sum 1.1 reduc ...
- DevExpress XtraReport报表预览时可编辑的功能
设置控件的EditOptions.Enabled=true即可 注册实现PrintingSystem. EditingFieldChanged事件,可获得当前发生更改的控件的值. 另:XtraRepo ...
- 深入探讨HBASE
HBASE基础 1. HBase简介HBase是一个高可靠.高性能.面向列的,主要用于海量结构化和半结构化数据存储的分布式key-value存储系统. 它基于Google Bigtable开源实现,但 ...
- JS生成限定整数区间范围内的随机整数
对于整数区间获取随机整数: m,n均为整数,且n>m. 获取[m,n)区间内的随机整数: 1 var aNumber = (n - m) * Math.random() + m; 2 var r ...
- zabbix 告警实践分享 一键实现zabbix 电话、邮件、微信告警
众所周知Zabbix 是一款用来监控IT基础设施的监控套件,同时也具有很多方便运维人员使用的优秀功能,如:支持多条件告警,支持多种告警方式,支持多组模板.支持模板继承,因此在众多的开源运维监控软件中独 ...
- 域渗透之ldap协议
LDAP(Light Directory Access Protocal)是一个基于X.500标准的轻量级目录访问协议,LDAP是支持跨平台的Internet协议,只需要通过LDAP做简单的配置就可以 ...
- SpringBoot 之 @ControllerAdvice 拦截异常并统一处理
在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...