博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构之快速排序
阅读量:6983 次
发布时间:2019-06-27

本文共 1451 字,大约阅读时间需要 4 分钟。

首先快速排序:就是选择一个基数,然后从两端依次进行比较,若右边大于基数,则不进行交换,直到右边的数据小于基数,然后冲左边开始和基数比较,若左边的小于基数,则进行下一个比较,直到左边的数据大于基数才进行比较。循环的跳出条件是左边的数组号大于或者等于右边的数组号。

实例数组是:23  34 56 78 65 90 88 92 18 21

首先以23作为基数,则进行比较时,从右边开始,21和23比较,21小于23,所以,把21放到23的位置。结果为21  34 56 78 65 90 88 92 18 【】。
然后从左边开始和基数23比较,21小于23,向右移一位,low位+1,用34和23比较,发现34大于23,则把34放到上次移动后的位置【】,
这次交换后的排序结果是: 21  【】 56 78 65 90 88 92 18 34,
接着继续从右边开始比较,34大于23,向左移一位,high减一,使用18和23比较,18小于23,把18放到上次34移走后的位置,结果为: 21  18 56 78 65 90 88 92 【】 34,
接着再从左边开始进行比较,18小于23,56大于23,所以把56移位到上次18移走后的位置【】处,结果为:21  18 【】 78 65 90 88 92 56 34,
接着再从右边开始比较,发现56,92,88,90,65,78都比23大,比较完后没有需要移动的,且从左边开始比较的坐标和冲右边开始比较的坐标一样,两边碰面了,则这次比较就结束了,
最终把基数放到最后【】处的位置即可。
比较一次结束,可以唯一确定一个数据的最终位置,比如这次排序后,基数23的位置以确定了的,其他的数据属于待排状态,以基数为分界线,把基数两边的数据按照统一的规则进行排序,直到排序出最终结果位置。

快速排序的Java实现代码如下所示:

package com.class02;/** * 快速排序: * @Date: 2019/3/23 9:55 * @Version: 1.0 */public class QucikSortTest {    static int a[] = {23,34,56,78,65,90,88,92,18,21};    public static void Sort(int a[],int low,int high){        int stand=0;        if(low<0||high<0||low>high||low>=a.length)return;        stand=getMid(a,low,high);        if(low
=stand)high--; a[low]=a[high]; while(low
<=stand)low++; a[high]=a[low]; } a[low]=stand; show(a); return low; } public static void show(int a[]){ for(int i=0;i

程序的运行结果如下所示:

 

转载于:https://www.cnblogs.com/guopengxia0719/p/10582998.html

你可能感兴趣的文章
innoDB 存储引擎
查看>>
H5调用Android播放视频
查看>>
ASP.NET Aries JSAPI 文档说明:AR.DataGrid、AR.Dictionary
查看>>
1024程序员节获奖通知
查看>>
9大方法为云安全保驾护航
查看>>
Android Studio Linking an external C++ project 时候 报Invalid file name. Expected: CMakeLists.txt
查看>>
MYSQL数据库注释
查看>>
管理11gRAC基本命令 (转载) 很详细
查看>>
数据库 SQL语法一
查看>>
实现物体绕不同轴旋转,并可以外部调用的函数
查看>>
UDP socket 设置为的非阻塞模式
查看>>
Atitit截屏功能的设计解决方案
查看>>
mysql通过binlog日志来恢复数据
查看>>
JWT实现token-based会话管理
查看>>
Shell学习笔记 - 环境变量配置文件(转)
查看>>
CSharpGL(39)GLSL光照示例:鼠标拖动太阳(光源)观察平行光的漫反射和镜面反射效果...
查看>>
scikit-learn 入门
查看>>
调用百度云Api实现从百度云盘自动下载文件
查看>>
Java中的List
查看>>
Mycat原理、应用场景
查看>>