快速排序2
2014-08-28 11:28
127 查看
public static void quickSort2(int[] a, int left, int right) { { int i,j,tmp,pivot ; if(left>right) { return; } pivot=a[left]; //pivot中存的就是基准数 i=left; j=right; while(i!=j) { //顺序很重要,要先从右边开始找,如果先从左边找,i++后若满足i>=j则停止,i对应一个大于基准的数,再与基准数交换到左边就不对了! while(a[j]>=pivot && i<j) { j--; } //再找做左边的 while(a[i]<=pivot && i<j) { i++; } //交换两个数在数组中的位置 if(i<j) { tmp=a[i]; a[i]=a[j]; a[j]=tmp; } } //最终将基准数归位 swap(a,left,i); quickSort2(a,left,i-1);//继续处理左边的,这里是一个递归的过程 quickSort2(a,i+1,right);//继续处理右边的 ,这里是一个递归的过程 } }
static void swap(int[]a ,int i,int j){ int t; a[i]; a[i] = a[j]; a[j] = t;}