快速排序算法
思想:二分法,分治法,递归
排序实例
6 1 2 7 9 3 4 5 10 8
6为基准,也就是temp
先从右找第一个比基准数小的,再从左找第一个比基准数大的,进行交换,这里必须从右边先找的原因是因为基准数定的是最左的数。
如果选取最左边的数a[left]作为基准数,那么先从右边开始可保证i,j在相遇时,相遇数是小于基准数的,交换之后temp所在位置的左边都小于temp。但先从左边开始,相遇数是大于基准数的,无法满足temp左边的数都小于它
找到7 和 5
6 1 2 7 9 3 4 5 10 8
交换后得到
6 1 2 5 9 3 4 7 10 8
依次类推,当得到 i == j 或 i > j时,排序无法继续进行,此时情况如下
6 1 2 5 4 3 9 7 10 8
此时交换基准数与3
3 1 2 5 4 6 9 7 10 8
这样就保证了基准数6左边都比他小,右边都比他大
这时,再将3设为基准数,在3 1 2 5 4 中进行快速排序,在9 7 10 8中进行快速排序
也就是进行递归排序算法,最终就得到排序结果
1 2 3 4 5 6 7 8 9 10
1 |
|
测试用例:
Input:
11
3 4 5 1 34 61 22 41 111 2 87Output:
1 2 3 4 5 22 34 41 61 87 111