快速排序的基本思路
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
快速排序是冒泡排序的改进.
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。这里我选取第一个数为基数
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
Java代码实现
package tyut.mcf;
import java.util.Arrays;
/**
* @author machenfei
* @date ${DATA} -9:49
*/
public class quickSort {
public static void main(String[] args) {
int[] arr = {5, 9, 1, 9, 5, 3, 7, 6, 1};
quickSort(arr,0,8);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] nums, int begin, int end) {
//判断是否要排序
if (begin<end) {
int left = begin;//左指针
int right = end;//右指针
int key = nums[begin];//以数组第一个数作为基准
while (left < right) {
//此时左指针指向的内存可以看成是一个空内存,
// 需要右指针从前往后找到一个比基准小的数字填入左指针指向的内存
while (left < right && nums[right] > key) {
right--;
}
if (left < right) {
nums[left] = nums[right];
left++;
}
//此时右指针指向的数字已经转移到左指针指向的内存,
// 所以交换后,右指针指向的内存相当于空
while (left < right && nums[left] < key) {
left++;
}
if (left < right) {
nums[right] = nums[left];
right--;
}
}
nums[left] = key;
//递归左序列和右序列
quickSort(nums, begin, left - 1);
quickSort(nums, left + 1, end);
}
}
}