快速排序
挖坑填数+分治法
快排的思想就是:
- 头尾指针,挖坑填数,确定一个元素,它的左边元素都比它大,右边元素都比它小
- 递归,保证每一个子列表都满足它的左边元素都比它大,右边元素都比它小,这样就是有序的
为什么要用分治法?
根源是:一次挖坑排序,只能确保
https://blog.csdn.net/MoreWindows/article/details/6684558
可以使用分治的保障是?
每次会返回一个middle值,这个值,左边的都比他小,右边的都比他大
这样才能保证调整到最后整个数组有序
挖坑:
不需要担心数据被覆盖,因为数据都已经被保存了.
对挖坑填数进行总结
1.i =L; j = R; 将基准数挖出形成第一个坑a[i]。
2.j–由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。
3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。
4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中。
递归实现:
1 | public class QuickSort { |
将中间一部分抽出来,可以看到就是一个典型的递归
1 | public class QuickSort { |
python:
1 | def adjust_array(low, high): |