算法之路_10、经典快速排序
一、算法思路
快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。在本篇中采用以数组最后一位数作为中轴,通过一次partition将数组分为两部分,左边区域小于等于该数字,右边区域大于该数字。(参见算法之路_8、数组切分问题),再对左右部分依次进行切分步骤,直至整体有序。
二、代码+注释
package algorithm_02;import logarithmic_device.Sort_logarithmic_device;public class QuickSort {//经典快排 以最后一位数作分界 小于等于放左边 大于放右边 递归左右 直至整体有序public static void classicalQuickSort(int arr[]){if (arr==null||arr.length<2) {return;}classicalQuickSort(arr,0,arr.length-1);}private static void classicalQuickSort(int[] arr, int L, int R) {if (L<R) {//当只有一位数时 则默认有序 int no=classicalPartition(arr,L,R);classicalQuickSort(arr, L, no-1);classicalQuickSort(arr, no+1, R);}}private static int classicalPartition(int[] arr, int L, int R) {int more=R;//从最后一位数开始 扩大大数字范围while(L<more){if(arr[L]>arr[R]){//当前数比最后一位大时 与大范围得前一位交换Sort_logarithmic_device.swap(arr, L, --more);}else{//小于等于等当前数字游标向前扩大一位L++;}}//最后将大范围得第一个数字与数组最后一位交换。确定最后一个数字得位置并返回Sort_logarithmic_device.swap(arr, L, R);return L;}public static void main(String[] args) {int arr[]={1,0,-9,-9,-9,8,5,6,10,-2};classicalQuickSort(arr);for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}}}
算法之路_10、经典快速排序相关推荐
- 算法之路_11、优化后的快速排序
一.优化 使用之前介绍过的 算法之路_9.荷兰国旗问题 来改进经典快速排序.上一篇快排讲到得是将数组分割成两部分,直至全部有序.而荷兰国旗问题则是将一个数组分成三部分,左边小于比较数字,中间等于比较数 ...
- 算法学习(二)快速排序(下)
快速排序采取的是分治法,所以怎么把一个无序的数组以某个点为中界来将其拆分成有序的两部分,这是其快 排的核心方法. 在上一章中,是一开始提出来的"快速排序",但是这个世界上在某些地方 ...
- 算法学习(二)快速排序(上)
快速排序采用的思想是分而治之. 1)将一整个大的无序序数组,根据数组中的某一个值,将数组分成两部分,一部分比这个值小,一部分比这个值大. 2)然后再对这两部分各自进行同样的操作,而当每一部分都有序之后 ...
- 专访张俊林:十年程序员的感悟与算法之路
专访张俊林:十年程序员的感悟与算法之路 发表于2015-10-29 02:23| 3654次阅读| 来源CSDN| 2 条评论| 作者钱曙光 社区之星专访张俊林算法机器学习 width="2 ...
- 会计转行算法之路(一)会计转程序员
会计转行算法之路(一)会计转程序员 回忆起来,要感谢互联网,感谢开源,没有互联网,就没有我的今天,我也就无法走上自己的追梦之路. 每次迷茫的时候,回忆一下初心,我的理想是什么? 通过科学技术,改善人们 ...
- [4] 算法之路 - 插入排序之Shell间隔与Sedgewick间隔
题目 插入排序法由未排序的后半部前端取出一个值.插入已排序前半部的适当位置.概念简单但速度不快. 排序要加快的基本原则之中的一个: 是让后一次的排序进行时,尽量利用前一次排序后的结果,以加快排序的速度 ...
- 【PAT算法之路】 -- 专栏总揽
简介 首先是菜鸡自我介绍,刷了一个月PAT算法(之前有一些数据结构基础), PAT考了97.比起一大波满分的,自然很弱,而且个人运气较好. 详情见:我的大学 ------------ 机械.单片机.电 ...
- 算法探讨——再议经典算法问题:求最大子序列和、绝对值最大子序列和以及其区间...
算法探讨--再议经典算法问题:求最大子序列和.绝对值最大子序列和以及其区间 给定任一数字序列,如{-5,4,-20,16,-2,-3},求出其最大子序列和,绝对值最大子序列和以及对应的区间,在这个例子 ...
- 算法---排序--希尔排序和快速排序
冒泡.选择.插入排序算法是三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大,那么这三种简单的排序所需要的时间则是我们所不能接受的.接着我们在讲解递 ...
最新文章
- Transformer-LS霸榜ImageNet,输入长度提升三倍!极度压缩参数
- Linux 搭建golang开发环境
- (chap6 Http首部) 其他首部字段
- 一个springboot能支持多少并发_吃透这篇,你也能搭建出一个高并发和高性能的系统...
- matlab 凹盘,刹车盘凹槽是怎么形成的
- android support design library eclipse,Eclipse下使用Android Design Support Library中的控件
- 重装系统 linux启动windows系统文件在哪里,Win-Lin双系统重装Windows找回Linux启动
- nofollow标签_nofollow标签是什么?如何使用
- python对Excel数据进行读写操作
- 二叉树 --5.1.3 Binary Tree Zigzag Level Order Traversal --图解
- 【315天】每日项目总结系列053(2017.12.17)
- Myeclipse10安装反编译软件笔记
- 大数据技术原理与应用(第三版)林子雨教材配套实验答案---实验二 熟悉常用的hdfs操作
- 单片机C语言 -- 基于条件选择的状态机编程技巧
- uniapp折叠框二级循环
- 昨天熬夜整了一波,值了!
- 骇客学堂:网络入侵检测初步探测方法
- Word 公式排版(使用制表符)
- 世界顶级黑客,能入侵一台没有联网的电脑吗?
- 用Java实现的eChat聊天服务器
热门文章
- js控制回车触发事件
- Java实现电商秒杀系统-jseckill
- ISCSI网络磁盘配置
- 深度|Web3.0时代的范式之变
- No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-netflix-ri
- 软件架构风格 仓库风格_功能风格–第7部分
- 创建Linux虚拟机及安装Linux镜像教程(手把手教程)
- 指定wsus服务器,组策略指定 Win10 LTSC 更新地址为 WSUS 服务器
- CCSprite:精灵
- Hugging Face PEFT 调优实战附代码