//基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
/**
* 快速排序
* date : 2012/11/9
*/
package com.ccsu.arithmetic.sort;
public class QuickSort {
/**
* @param array
* @param p
* @param q
* @return 划分位置
*/
public static int partition(int array[], int p, int q) {
int x = array[p];
int i = p;
for (int j = p + 1; j <= q; j++) {
if (array[j] < x) {
i += 1;
swap(array, i, j);
}
}
swap(array, p, i);
return i;
}
// 交换数据
public static void swap(int[] array, int m, int n) {
int temp = array[m];
array[m] = array[n];
array[n] = temp;
}
public static void quickSort(int array[], int p, int q) {
if (p < q) {
int r = partition(array, p, q);
quickSort(array, p, r - 1);
quickSort(array, r + 1, q);
}
}
public static void main(String[] args) {
int[] array = new int[] { 2, 1, 3, 4, 5, 9, 7, 6 };
quickSort(array, 0, array.length - 1);
for (int i : array) {
System.out.print(i + " ");
}
}
}
|