看了[啊哈!算法]之后,在网上找了一下,没发现能简单理解的快速排序的java程序(可能是我渣).....
在书上的算法步骤是:
假设获得一个数组,需要对它排序。
1;首先把数组左边界(什么是左边界)第一个数作为基准数。
2;然后从数组尾部开始,判断最后一个数是否大于或等于基准数,是的话就往前走(下标减一)再比较,直到找到第一个比基准数小的数。
3;接着,从数组头部开始,判断第一个数是否小于或等于基准数,是的话就往后走(下标加一)再比较。直到找到第一个比基准数大的数。
4;把这两个找到的数互换位置。
5:继续找,继续互换。直到后面判断的位置和前面判断的位置重叠,这时候把重叠位置的数与基准数互换位置。
6:递归上述过程。
public class Main{ public static void main(String args[]){ int []a = new int[100]; for(int i=0;i<100;i++){ a[i] = (int)(10000*Math.random()); } quicksort(a,0,a.length-1); //排序。 /*for(int q=0;q<a.length-1;q++){ //用来验证是否是从小到大排列 if(a[q]>a[q+1]){ System.out.print(false); break ; } }*/ } static void quicksort(int []a,int left, int right){ int i,j,t,temp; if(left > right) return; temp = a[left]; i=left; j = right; while(i<j){ while(a[j]>=temp && i <j) j--; while(a[i]<=temp && i<j) i++; if(i<j){ // 把两个找到的数调换位置。 t=a[i]; a[i]=a[j]; a[j]=t; } } a[left]=a[i]; //因为temp早已经赋值成a[left],所以这三句就相当于a[left]和a[i]互换位置。 a[i]=temp; quicksort(a,left,i-1); // 从基准数为中心,左边递归,右边递归,所以时间复杂度 Nlog2(N) quicksort(a,i+1,right); } }
可能有理解错的地方,欢迎指出..