排序问题是我们算法中最常遇到的问题,也是最基础的问题。排序算法主要有8大算法。今天主要介绍快速排序。
快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。下图为快排动态图:
一言不和我们就先上代码:
public class QuickSort {
//打印数组
private void printf(int[] values){
StringBuffer append = new StringBuffer("{ ");
for (int i = 0 ; i< values.length;i++){
append.append(values[i]+" ");
}
append.append("}");
System.out.println(append.toString());
}
public void quick(int[] values){
System.out.print("排序前: ");
printf(values);
quickSort(values,0,values.length-1);
System.out.print("排序后: ");
printf(values);
}
/**
* 快速排序算法
* @param vlues
* @param start
* @param end
*/
private void quickSort(int[] vlues,int start,int end){
int i = start;
int j = end;
int key = vlues[start];
while (i < j){
while (i < j && vlues[j] - key >= 0){
j--;
}
if (i < j){
vlues[i] = vlues[j];
i++;
}
while (i < j && vlues[i] - key <= 0){
i++;
}
if (i < j){
vlues[j] = vlues[i];
j--;
}
}
vlues[i] = key;
printf(vlues);
if (start < i -1){
this.quickSort(vlues,start,i - 1);
}
if (i+1 < end){
this.quickSort(vlues,i+1,end);
}
}
}