快速排序的思想:
1、先找一个枢轴,使得整个数组的右边的数都大于等于这个数,数组左边的数都小于等于这个数
2、然后采用分治法对这个数两边的两段数组采用上述相同的方法进行排序
概括起来就是先对数组进行partion,找到下一个枢轴的位置,然后再对左右两边递归进行sort。
下面是快速排序算法的Java实现源码:
import java.util.Arrays;
/*
* 创建一个快速排序的实现类
*
* * */
public class QuickSort {
/*
* 创建一个基于递归的快速排序方法
* 方法输入:待排序数组a,待排序数组下界,待排序数组上界
*
* */
public void Sort(int[] a,int l, int r) {
//边界检测,数组下界必须小于上界,才有必要进行下一次快排
if(l < r) {
int i = l, j = r, temp = a[i];
//挖坑填坑部分
while(i < j) {
while(i < j && a[j] >= temp) {
j--;
}
if (a[j] < temp) {
a[i] = a[j];
i++;
}
while(i < j && a[i] < temp) {
i++;
}
if (a[i] > temp) {
a[j] = a[i];
j--;
}
}
a[i] = temp;
//分治法递归进行左右两边快排
Sort(a,l,i-1);
Sort(a,i+1,r);
}
}
/*
* 程序主函数,进行类方法调用
*
* */
public static void main(String [] args) {
int [] a = {1,5,9,6,10,8,3,2};
QuickSort quickSort = new QuickSort();
quickSort.Sort(a, 0, a.length-1);
//将数组转换为字符串输出
System.out.println(Arrays.toString(a));
}
}