严版快速排序Partion方法
严版快速排序Partion方法
@(算法学习)
int Partion(int A[], int low, int high)
{int pivot = A[low]; // 第一个元素设为pivot值while(low < high){while(low < high && A[high] >= pivot){--high; // 从右往左找到第一个比pivot小的停下来}A[low] = A[high]; //把比pivot小的数移到pivot在的位置,因为pivot已经存储了,所以可以直接覆盖// 此时high指向的位置空出来了,从左往右寻找比pivot大的值,欢迎入住high的老家while(low < high && A[low] <= pivot){++low;//直到low指向第一个比pivot大的值停下来}A[high] = A[low]; // low指向的值要搬到high处,则low处的位置空了,且其左边都是不大于pivot的,右边}// 上面的大循环是low == high才结束,因此不是从右到左一次再从左到右一次就结束,而是直到pivot真的比左边都大比右边都小时结束A[low] = pivot; //此时return low;
}
举个例子:
28, 16, 32, 12, 60, 2, 5, 72
首先以pivot = 28, 从右往左找比第一个28小的,找到5,将5覆盖到28处:
5, 16, 32, 12, 60, 2, 5⎯⎯\underline 5 , 72
划线的5是可以被覆盖的。
再从左往右找第一个比28大的,找到32,将其填到划线的5处。
5, 16, 32⎯⎯⎯⎯\underline {32}, 12, 60, 2, 32, 72
注意此时high指向的是粗体的32,low指向的是划线的32.
这时候low仍然小于high,因此继续循环。
从右往左找比28小的,找到2,填充到划线的32处。
5, 16, 2, 12, 60, 2⎯⎯\underline 2, 32, 72
high指向的是划线的2,low指向的是粗体的2.
low < high仍然成立。
从左往右找比28大的,找到60,覆盖划线的2.
5, 16, 2, 12, 60⎯⎯⎯⎯\underline {60}, 60, 32, 72
此时可以看到low就在high左边了。下一轮是从右往左,找比28小的,–high一次,与low相等,于是外层循环条件被打破,low与high都指向划线的60.
这个位置是用来存pivot的。把pivot放进来:
5, 16, 2, 12, 28, 60, 32, 72
这样才能说一次Partion结束,此时28就是最终的位置。左边都比28小,右边都比28大。
注意:快排是不稳定的。比如:2,1,1,交换一次变为1, 1, 2,1的相对位置改变,所以不稳定。
严版快速排序Partion方法相关推荐
- Partion方法的应用
快速排序算法是常见的排序算法的一种,其思想为: 1)任选无序区的一个元素作为基准 2)对无序区进行划分,小于基准的元素位于基准左边,大于基准的元素位于基准右边 3)对左右两个子序列递归调用算法 由于每 ...
- python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...
前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...
- Spring Boot 实战 —— MyBatis(注解版)使用方法
原文链接: Spring Boot 实战 -- MyBatis(注解版)使用方法 简介 MyBatis 官网 是这么介绍它自己的: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过 ...
- VS2013(Visual Studio 2013)官方中文旗舰版安装激活方法
dio 2013旗舰版. VS2013(Visual Studio 2013)官方中文旗舰版安装激活方法 1.下载后得到的是ISO文件,直接解压缩或用虚拟光驱加载运行都可以 2.无所不藏在这里直接解压 ...
- mysql8 win10启动_Windows10 mysql 8.0.12 非安装版配置启动方法
本文为大家分享了mysql 8.0.12非安装版配置启动的具体步骤,供大家参考,具体内容如下 1.官方下载地址 选择: MySQL Community Edition -> MySQL Comm ...
- 免安装版的mysql步骤_mysql免安装版的安装方法及步骤
mysql免安装版的安装方法及步骤 发布时间:2020-07-15 14:07:18 来源:亿速云 阅读:83 作者:清晨 小编给大家分享一下mysql免安装版的安装方法及步骤,希望大家阅读完这篇文章 ...
- 链表快速排序python_Python一行代码实现快速排序的方法
今天将单独为大家介绍一下快速排序! 一.算法介绍 排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法.其中" ...
- 优麒麟在linux下安装教程,在优麒麟Ubuntu Kylin系统中安装百度网盘Linux版.deb的方法...
本文介绍在优麒麟Ubuntu Kylin操作系统中安装百度网盘Linux版.deb的方法,可用在优麒麟及 Ubuntu 19.04/18.04上,当前百度网盘Linux版的版本号是Linux V2.0 ...
- mysql 5.5免安装配置_mysql的参考文档mysql5.5.21免安装版的配置方法
mysql的5.5版本(与5.1版本有所区别)中my.ini文件的内容. 在mysql根目录里新建my.ini文件,用阅读器打开(加入如下内容) [client] #password = your_p ...
最新文章
- 彻底理解js中this的指向
- 套用match_再也不用伤脑筋了,分享九个可以直接套用的Excel常用公式,收藏备用...
- java聊天程序_急需一个用java 语言写的聊天程序
- Nxt节点安装指南之RaspberryPi树莓派版
- 中心化(又叫零均值化)和标准化(又叫归一化)
- php 做积分策略,Heartbeat的切换策略-积分统计方法
- Hello Blazor:(9)Source Generators生成导航菜单
- burst什么意思_为什么Windows/iOS操作很流畅而Linux/Android却很卡顿呢?
- 实习笔试题,源代码编译
- 用Not Exists 代替Not In
- 浅谈木材加工企业的电气火灾隐患及电气火灾监控系统的应用
- Python 基础(一):入门必备知识
- 厦门大学2019年数学分析考研试题
- 给自己一个不断学习的理由
- 每天睡6小时和8小时的区别 看完再不敢熬夜了
- unity模型制作规范
- EasyExcel的简单读取操作
- HMM模型 forward backward viterbi算法
- vue-music 跨域获取QQ音乐歌单接口
- 数据库设计学习①:数据库设计简介
热门文章
- 使用CSDN的MarkDown编辑公式
- 使用python对文件下的文件批量重命名
- mybatis mysql 模糊查询语句_mybatis+Spring mysql的模糊查询问题
- 封条格式用word怎么打_封条格式用word怎么打
- windows和android结合,Android和Windows 10可以很好地合作的10种方式
- 原子自增_多线程系列-(六)原子类与CAS(了解即可)
- docker pull 私有_Docker系列教程03Docker私有仓库搭建(registry)
- 最大公约数简便算法_最大公约数的求法
- java 字符串池_什么是Java字符串池?
- spring框架mvc框架_5篇Spring框架书籍,通过MVC学习Spring