关于快速排序partition函数的几种不同写法

快速排序的基本思想虽说是一样的,都是通过遍历数组将数组分成两个部分,左边的部分都比右边的部分小,
多次遍历,最终得到排好序的数组。
但是,分成两个部分的方法不一样,也会导致partition函数的写法有一些差别。
第一种
先找到一个基准值,然后从两头向中间遍历,先从后面向前遍历直到找到比基准值小的数,
开始将这个小的数放到基准值曾待着的位置,接着从这个小的数后一位开始遍历,直到找到比基准值大的数,
然后将这个大的数放到之前小的数曾经待过的位置,然后从大的数所待的位置的前一个位置开始,
向前遍历,直到找到比基准值小的数,如此循环往复直到前后两个指针碰面,即可达到分成大小两个堆的数被基准值分割的效果,
将这种方式递归下去,便能够最终将数组排好序。
第二种
这种情况是第一种情况的变形,只是少了基准值,大致也是从两头向中间遍历,最终碰面的地方就是两组数据的分界位置。
第三种
这种情况是从左往右依次遍历,三个指针(l=基准值,j=小于基准值的数据最右边的那一个,i=大于基准值的数据最右边的那一个)都在数组的最左边。
当遇到的新数是大于基准值的,直接i自增即可,
如果遇到的新数是小于基准值的,让j位置的数据与i位置的数据调换位置即可。
i从左往右遍历一遍之后形成的状态即是两组数据被一个基准值分割的状态,即是快排基本思想体现的状态。
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务