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); } }