A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


import java.util.Arrays;
public class QuicklySort {
        public static void main(String[] args) {
                int[] arr = {44,5,24,8,1,7,35,9,32,5,61,33};
                quicklySort(arr,0,arr.length-1);
                System.out.println(Arrays.toString(arr));
        }       
        //快速排序:初始值传入        int start = 0;int end = arr.length-1;
        public static void quicklySort(int[] arr,int start,int end) {       
                int target = searchLocation(arr,start,end);        //将数组进行第一次排序,并得到之前数组中arr[0]的位置target
                int target1 = searchLocation(arr,start,target-1);//将数组进行第二次排序,并得到第一次排序后数组中arr[0]的位置target1
                int target2 = searchLocation(arr,target+1,end);//将数组进行第三次排序,并得到第一次排序后数组中arr[target+1]的位置target2
                if (start < target1-1) {
                        quicklySort(arr,start,target1-1);//递归排序每次左边的元素,直到每个元素比完了就结束。
                }
                if (target2+1 <= end) {
                        quicklySort(arr,target2+1,end);//递归比较每次右边的元素,直到每个元素比完了就结束。
                }
                return;
        }
        //从数组arr中start到end的一段,找到arr[start]在该段中按照大小排序后应该所处的位置,
        //并使这串数据中左边的数据比它小,右边的数据比它大,然后返回它在数组中的索引值。
        public static int searchLocation(int[] arr,int start,int end) {
                int target = start;
                int max = end;
                int min = start;
                while (max>min){
                        for (int i = max;i>min;i--) {
                                if (arr[target]>arr) {
                                        arr[target] = arr^arr[target]^(arr = arr[target]);
                                        target = i;
                                        break;
                                }
                        }
                        max = target;
                        min++;
                        for (int i = min; i<max ; i++) {
                                if (arr[target]<arr) {
                                        arr[target] = arr^arr[target]^(arr = arr[target]);
                                        target = i;
                                        break;
                                }
                        }
                        min = target;
                        max--;
                }
                return target;
        }
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马