黑马程序员技术交流社区

标题: 老师说的快排 [打印本页]

作者: SuperLan    时间: 2016-11-11 23:00
标题: 老师说的快排
import java.util.Arrays;
import java.util.Random;

public class QuickSort {

        public static void main(String[] args) {
               
        /*        递归: 自己调用自己
                    一直在动,反复的做一件事情
                     两者是否相遇   :  i ==  j时  两者相遇 ,基准数归位
       while()*/
                int [] arr = new int[1000000];
                Random rm = new Random();
               
                for (int i = 0; i < arr.length; i++) {
                            arr[i]  =  rm.nextInt();
                }
                System.out.println("快拍前");
                quickSort(arr,0,arr.length-1);
                System.out.println("快拍后");
                System.out.println(Arrays.toString(arr));
               
               
               
               
               
                //System.out.println(Arrays.toString(arr));
               
               
               
               
               
               
        }

       
        // 递归 得有出口
        private static void quickSort(int[] arr, int left, int right) {
                  
                 if(left > right){
                         return ;
                 }
                 
                 int i  = left;
                 int j  = right;
                 int baseNum = arr[left];
                 // 开始移动
                 // 没有相遇
                 while( i != j){
                         // 从右边开始解索,如果这个数 大于基准数的话,移动
                         while(arr[j] >= baseNum && j > i){
                                 j--;
                         }
                         while(arr[i] <= baseNum && i  < j){
                                 i++;
                         }
                         //两者交换位置
                         int temp = arr[i];
                         arr[i]  = arr[j];
                         arr[j] = temp;
                 }
                 // 一旦出了while循环,表示两者相遇
                 // 基准数归位 : 相遇的元素 和 第一位基准数交换位置
                  arr[left]= arr[i];
                  // 把基准数的值给相遇的数
                  arr[i] = baseNum;
               
                  
                  quickSort(arr,left,i-1);
                  quickSort(arr,j+1,right);
               
        }
       
}

作者: Autumn、Yan    时间: 2016-11-12 10:20
没看明白

作者: L10052108    时间: 2016-11-12 12:39
既然分享了,就应该讲的比较细。这样基础代码,到处都是

作者: SuperLan    时间: 2016-11-12 19:53
L10052108 发表于 2016-11-12 12:39
既然分享了,就应该讲的比较细。这样基础代码,到处都是

关键我也没听明白呀




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2