快速排序的两种实现方式

从小-->大排序

以首位元素作为基准元素

在起始位置小于结束位置的前提下,先从右到左循环数组元素,如果大于基准元素,则向左移动结束位置的索引,当不满足循环条件的时候,将索引是高位的元素赋予索引为低位的元素(也就是首位元素所在的地方)

然后从左到右循环数组元素,如果小于基准元素,则向右移动开始位置的索引,当不满足循环条件的时候,也就是大于基准元素的时候,将索引为低位的元素赋予索引是高位的元素(比基准元素大的元素要放在基准元素的右边)

当低位元素的索引=高位元素的索引的时候将基准值赋予这个索引位置,

至此,这个索引位置左边的元素均小于他,右边的元素均大于他,

然后通过递归,将这个元素左右两边的元素重复这个过程,

以首位元素作为基准元素将数组进行从小到大排序至此完成

从大-->小排序

以结尾元素作为基准元素

在起始位置小于结束位置的前提下,从左到右遍历除最后一个数组元素以外的数组元素,如果没有比结尾元素大的元素,则将结尾元素和首位元素互换位置,此时结尾元素的索引位置为0,

如果中途有比他大的元素,则和这个元素互换位置,直至这个元素后面的元素都比他小,

遍历完所有元素后退出循环并返回当前基准元素所在的索引位置

然后通过递归重复上述过程:

如果遍历结束后返回的基准元素的索引发生了变化,则将其作为递归的开始元素+1,也就是从该元素的下一位元素到结尾元素开始循环;

反之,如果没有发生变动则将返回的基准元素的索引位置-1作为结尾元素进行下一次递归(没有变动代表他就是最小的了,就-1把他的上一位索引元素也就是比他低一位的索引元素作为下一次递归的数组结束元素)

至此,以结尾元素为基准元素将数组进行从大到小的排列至此完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值