严版快速排序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方法相关推荐

  1. Partion方法的应用

    快速排序算法是常见的排序算法的一种,其思想为: 1)任选无序区的一个元素作为基准 2)对无序区进行划分,小于基准的元素位于基准左边,大于基准的元素位于基准右边 3)对左右两个子序列递归调用算法 由于每 ...

  2. python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...

    前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...

  3. Spring Boot 实战 —— MyBatis(注解版)使用方法

    原文链接: Spring Boot 实战 -- MyBatis(注解版)使用方法 简介 MyBatis 官网 是这么介绍它自己的: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过 ...

  4. VS2013(Visual Studio 2013)官方中文旗舰版安装激活方法

    dio 2013旗舰版. VS2013(Visual Studio 2013)官方中文旗舰版安装激活方法 1.下载后得到的是ISO文件,直接解压缩或用虚拟光驱加载运行都可以 2.无所不藏在这里直接解压 ...

  5. mysql8 win10启动_Windows10 mysql 8.0.12 非安装版配置启动方法

    本文为大家分享了mysql 8.0.12非安装版配置启动的具体步骤,供大家参考,具体内容如下 1.官方下载地址 选择: MySQL Community Edition -> MySQL Comm ...

  6. 免安装版的mysql步骤_mysql免安装版的安装方法及步骤

    mysql免安装版的安装方法及步骤 发布时间:2020-07-15 14:07:18 来源:亿速云 阅读:83 作者:清晨 小编给大家分享一下mysql免安装版的安装方法及步骤,希望大家阅读完这篇文章 ...

  7. 链表快速排序python_Python一行代码实现快速排序的方法

    今天将单独为大家介绍一下快速排序! 一.算法介绍 排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法.其中" ...

  8. 优麒麟在linux下安装教程,在优麒麟Ubuntu Kylin系统中安装百度网盘Linux版.deb的方法...

    本文介绍在优麒麟Ubuntu Kylin操作系统中安装百度网盘Linux版.deb的方法,可用在优麒麟及 Ubuntu 19.04/18.04上,当前百度网盘Linux版的版本号是Linux V2.0 ...

  9. mysql 5.5免安装配置_mysql的参考文档mysql5.5.21免安装版的配置方法

    mysql的5.5版本(与5.1版本有所区别)中my.ini文件的内容. 在mysql根目录里新建my.ini文件,用阅读器打开(加入如下内容) [client] #password = your_p ...

最新文章

  1. 彻底理解js中this的指向
  2. 套用match_再也不用伤脑筋了,分享九个可以直接套用的Excel常用公式,收藏备用...
  3. java聊天程序_急需一个用java 语言写的聊天程序
  4. Nxt节点安装指南之RaspberryPi树莓派版
  5. 中心化(又叫零均值化)和标准化(又叫归一化)
  6. php 做积分策略,Heartbeat的切换策略-积分统计方法
  7. Hello Blazor:(9)Source Generators生成导航菜单
  8. burst什么意思_为什么Windows/iOS操作很流畅而Linux/Android却很卡顿呢?
  9. 实习笔试题,源代码编译
  10. 用Not Exists 代替Not In
  11. 浅谈木材加工企业的电气火灾隐患及电气火灾监控系统的应用
  12. Python 基础(一):入门必备知识
  13. 厦门大学2019年数学分析考研试题
  14. 给自己一个不断学习的理由
  15. 每天睡6小时和8小时的区别 看完再不敢熬夜了
  16. unity模型制作规范
  17. EasyExcel的简单读取操作
  18. HMM模型 forward backward viterbi算法
  19. vue-music 跨域获取QQ音乐歌单接口
  20. 数据库设计学习①:数据库设计简介

热门文章

  1. 使用CSDN的MarkDown编辑公式
  2. 使用python对文件下的文件批量重命名
  3. mybatis mysql 模糊查询语句_mybatis+Spring mysql的模糊查询问题
  4. 封条格式用word怎么打_封条格式用word怎么打
  5. windows和android结合,Android和Windows 10可以很好地合作的10种方式
  6. 原子自增_多线程系列-(六)原子类与CAS(了解即可)
  7. docker pull 私有_Docker系列教程03Docker私有仓库搭建(registry)
  8. 最大公约数简便算法_最大公约数的求法
  9. java 字符串池_什么是Java字符串池?
  10. spring框架mvc框架_5篇Spring框架书籍,通过MVC学习Spring