快速排序算法(升序):
1. 选择数组arr中的一个数A作为基准,进行排序,排序结果为A左边的数都小于等于A,A右边的数都大于等于A,A左边的元素集合为sub-arr1, A右边的元素集合为sub-arr2.
2. 使用递归方法对sub-arr1, sub-arr2 进行步骤1的排序算法,直到产生的sub array长度为1, 就结束递归。
步骤1的实现方法如下:
设置指针index指向基准元素A的位置, 设置指针right指向arr[arr.length-1], 设置指针left指向arr[0], 交换arr[0]和arr[index],
循环执行以下步骤,条件 left < right {
循环向左移动right指针,条件left<right , 确保right右边的元素都>=A. 如果遇到小于A的元素,把该元素放到left指向的位置,index移动到该元素的位置,left++, break;
循环向右移动left指针,条件left<right, 确保left左边的元素都<=A, 如果遇到大于A的元素,把该元素放到right指向的位置,index移动到该元素的位置,right++, break;
}
把index指向的元素设置成基准元素A, 结束。
==================另外一种实现===================
设置指针right指向arr[arr.length-1], 设置指针left指向arr[0]
循环执行以下步骤,条件 left < right {
循环向左移动right指针,确保right右边的元素都>=A. 如果遇到小于A的元素,停止移动,
循环向右移动left指针,确保left左边的元素都<=A, 如果遇到大于A的元素,把该元素和right指向的元素对调
left++; right++
}
把 left 指向的元素设置成基准元素A, 结束。
边界条件可能有问题,待完善。