快速排序是一种不稳定、速度较快的排序方法,基本思想:R[1,2,...,n]中任选一个数作为基准,将其分为两个子区间R[1,...,pos-1](均小于基准数)和R[pos+1,...,n](均大于基准)。
以下Demo选择数组第一个元素作为基准
package SortRank;
/**
* 快速排序1:挖坑填数+分治(包含递归)
* @author 18322
*
*/
public class QuickSort {
public static void main(String[] args) {
int count = 1;
int arr[] = {5, 9, 4, 10, 2, 8, 7, 3, 6, 13, 11, 32, 1};
System.out.println("数组排序前的顺序:");
printArray(arr);
sort(arr, 0, arr.length-1, count);
System.out.println("数组最终排序的顺序:");
printArray(arr);
}
private static void sort(int arr[], int start, int end, int count) {
if(arr == null || start >= end) return;
int i = start, j = end;
int pivotkey = arr[start];
while(i < j) {
while(i < j && arr[j] >= pivotkey) j--;
if(i < j) arr[i++] = arr[j];
while(i < j && arr[i] <= pivotkey) i++;
if(i < j) arr[j--] = arr[i];
System.out.println("第" + count + "次数组排序的顺序:");
printArray(arr);
count++;
}
arr[i] = pivotkey;
sort(arr, start, i-1, count);
sort(arr, i+1, end, count);
}
private static void printArray(int arr[]) {
for(int in : arr) {
System.out.print(in + "\t");
}
System.out.println();
}
}