快速排序
代码
大概的思路是找到一个基点,然后遍历整个数组(C语言为例),使用左右两个索引然后,没有重合的时候找到前面比基点大的,后面比基点小的,之后进行交换,保证前面的都比基点小,后面的都比基点大,然后当i>j时把基点和i的索引位置的数字交换,之后进行递归调用即可
PS:快速排序不稳定
举个例子:待排序数组: int a[] ={1, 2, 2, 3, 4, 5, 6};在快速排序的随机选择比较子(即pivot)阶段:若选择a[2](即数组中的第二个2)为比较子,,而把大于等于比较子的数均放置在大数数组中,则a[1](即数组中的第一个2)会到pivot的右边, 那么数组中的两个2非原序(这就是“不稳定”)。若选择a[1]为比较子,而把 小于等于 比较子的数均放置在小数数组中,则数组中的两个2顺序也非原序
1 |
|
- 本文作者: windfill
- 本文链接: https://windfill.github.io/article/ff8068c0.html
- 版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!