快速排序采用的思想是分治思想,用一个数作为key,把数组中比key大的放右边,小的放左边,再把两边进行同样操作直到不满足条件
/**
* @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); //对右边排序
}
}
|