算法思想
在数组中选出一个元素做为中枢值,把所有比它小的元素都移动到它的左边,比它大的元素都移动到它的右边。直到数组有序。
递归实现
1 | private static void qSort(int[] a,int left,int right){ |
具体流程:
- 定义两个指针
left
和right
代表两个初始化位置,分别表示需要排序数组的最左和最右。 - 一直遍历,right向左移动,直到找到小于中枢值的位置。
- 一直遍历,left向右移动,直到找到大于中枢值的位置。
- 如果left<right,交换这两个元素。
- 重复上面步骤。
- 使用递归再对两边子数组进行排序。
非递归实现
1 | // 非递归实现快排 |
对需要排序的数组的左指针和右指针l、r记录起来,压入到栈中,每次循环都会弹出一对l、r。
当栈为空时,说明都已经排序了。接收循环。