Java 快排

基于分治法的快排,用递归实现。

首先讲一下实现的过程.

1.在数组中取一个数作为基准,所谓的基准就是用来对比的数.

2.然后在数组中从后往前找,找到一个逆序数为止,找到之后就把它的值赋值到基准数的位,假设此逆序数的为止为j.

3.然后再数组中从前往后找,找到一个逆序为止,然后把这个值赋值到j位置,假设此次逆序数位置为i.

4.重复23.直i>=j.

说白点,假设目标顺序是升序,那么,在一次迭代后,处于基准为止左边的数全部的数都小于基准数,右边的全部都大于基准数。

然后再用分治法的思想,递归的调用(left,i-1)和(i+1,right)就可以完成排序.

代码如下

    public static void quicksort(int[] a, int left, int right) {
int i = left;
int j = right;
if (i < j) {
int p = a[left];
while (i < j) {
while (a[j] >= p && j > i) {
j--;
}
if (i < j) {
a[i] = a[j]; }
while (a[i] <= p && i < j) {
i++;
}
if (i < j) {
a[j] = a[i];
}
}
a[i] = p;
quicksort(a, left, i-1);
quicksort(a, i+1, right);
}
}
上一篇:Delphi中DLL的创建和使用


下一篇:HDU 4858 项目管理(邻接表 暴力模拟)