快速排序算法原理及Java代码实现

1 基本思想

1.1 意义

快速排序是冒泡排序的改进版,也是最好的一种内排序,还涉及到分治和递归

1.2 简单解释

冒泡排序中记录的比较和交换是在相邻的单元中进行,每次交换只能上移或下移一个单元,因而总的比较和移动次数较多

1.3 基本思想

①先从数列中取出一个数作为基准数(简单起见可以取第一个数)
②分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边(分区)
③再对左右区间重复第一步、第二步,直到各个区间只有一个数(递归

1.4 图示

第一趟排序
初始状态:10个数

0123456789
7265788604283734885

指定起始坐标i=0,结束坐标j=9;假设第一个数72为基准数,将72挖出来,空出位置

0123456789
6578860428373488572
i=0j=9x

从右向左移动j,找到第一个小于72的值48(j=8)

0123456789
6578860428373488572
i=0j=8x

将48加入到i=0的()位置,i++变为1,j=8处变为“

0123456789
4865788604283738572
i=1j=8x

从左向右移动i,找到第一个大于等于72的值88(i=3)

0123456789
4865788604283738572
i=3j=8x

将88加入到j=8的()位置,j–变为7,i=3处变为“

0123456789
4865760428373888572
i=3j=7x

从右向左移动j,找到第一个小于72的值42(j=5)

0123456789
4865760428373888572
i=3j=5x

将42加入到i=3的()位置,i++变为4,j=5处变为“

0123456789
4865742608373888572
i=4j=5x

从左向右移动i,寻找第一个大于等于72的值,找到坑(此时i=j)也没有找到,循环结束。
此时说明变量i左边的数字全部小于72,右边的数字全部大于72

0123456789
4865742608373888572
i=j=5x

将基准值72填入i=j的坑内,第一趟排序结束

0123456789
4865742607283738885
i=j=5

对前后两个分区继续重复刚才的步骤(递归),完成整个数列的排序

0123456789
6424857607273838588

2 Java代码实现快速排序

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值