标签:ima 改变 基本 src pre 递归 sum i+1 输出
取第一个数跟数组中的其他数比较,小的在左边大的在右边,就这样一直递归排序
1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 int a[] = {49, 38, 65, 97, 76, 13, 27, 49};//设置一个数组 4 sort(a,0,a.length-1); //调用快速排序方法 5 System.out.println(Arrays.toString(a)); //将快速排序过的数组输出 6 } 7 public static void sort(int a[], int left, int right) { 8 int i, j, key; 9 if (left > right) { //这个判断很重要的,有这个才会在函数递归的时候跳出 10 return; 11 } 12 i = left; //左边第一位开始 13 j = right; //右边最后一位 14 key = a[i]; //用数组的第一位数做为参考数 15 while (i < j) { // 从数组的两端交替向中间扫描 16 while (i < j && a[j] >= key){ //从右边开始扫描 17 j--; 18 } 19 //跳出循环说明右边这个点的数有比参考数小,所以两个数互换位子,小的到左边 20 a[i] = a[j]; 21 while (i<j && a[i]< key){ //再从左边扫描 22 i++; 23 } 24 //跟上面同理,只是相反 25 a[j] = a[i]; 26 } 27 a[i] = key; //这是循环到最后的时候 a[j] = a[i];产生重复,i的位置的数应该是key,所以替换回来 28 sort(a, left, i - 1); // 对小于key一边的递归排序 29 sort(a, i + 1, right); // 对高于key一边的递归排序 30 //直到两边排序完毕,在以上中的if判断中跳出这个方法成功快速排序 31 }
标签:ima 改变 基本 src pre 递归 sum i+1 输出
原文地址:http://www.cnblogs.com/zhouguanglin/p/7223463.html