zoukankan      html  css  js  c++  java
  • 双路快速排序

    class Solution {
        //quickSort函数
        public static void quickSort(int[] arr,int l,int r){
            if(l>=r)
            {
                return ;
            }
            int p=partition(arr, l, r);         //找到分界点的下标位置
            quickSort(arr,l,p-1);
            quickSort(arr,p+1,r);
        }
        //partition函数,找到第一个元素在数组中的位置,将数组分成两块
        public static int partition(int[] arr,int l,int r)
        {
            //随机生成一个下标,用来作为这个初始的l,将它与l下标的元素交换一下,再将l位置作为我们的v
            //下面的代码注释掉是为了提高在leetcode上的运行时间,最好加上这几行代码,具体作用之前已经讲过。
    //         Random m=new Random();
    //         int k= m.nextInt(r-l)+l;
    //         int tp=arr[k];
    //         arr[k]=arr[l];
    //         arr[l]=tp;
            
            
            //将随机化过后的第一个l位置的元素作为我们选择好的v
            int v=arr[l];
           //对于区间[l,i)来说,都是不大于v的,i是当前要判断的那个位置的下标  
            //而对于区间(j,r]来说,都是不小于v的,j是我们当前要判断的这个位置的下标
            int i=l+1;      //要判断的第一个i的值
            int j=r;        //要判断的第一个j的值
            while(true)
            {
                while(i<=r&&arr[i]<v) i++;          //对于i值满足arr【i】小于v,就一直往前走,直到遇见一个不满足条件的,前提要满足边界条件 i<=r;
                while(j>=l+1&&arr[j]>v) j--;        //----------------------------------------------------------------------------一样参上
                if(i>j)                            //上面两个式子都找到了满足条件的,需要交换了,但是前提需要判断一下i和j的顺序,如果此时i和j已经相遇了,说明数组已经是                                                                                                                                   有序了,可以直接break出去了
                {
                    break;
                }
                //交换一下元素位置
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
                //i和j继续
                i++;
                j--;
            }
            int swap=arr[j];
            arr[j]=v;
            arr[l]=swap;
            return j;
        }
        public int[] sortArray(int[] nums) {
            quickSort(nums,0,nums.length-1);
            return nums;
        }
    }

  • 相关阅读:
    316 Remove Duplicate Letters 去除重复字母
    315 Count of Smaller Numbers After Self 计算右侧小于当前元素的个数
    313 Super Ugly Number 超级丑数
    312 Burst Balloons 戳气球
    309 Best Time to Buy and Sell Stock with Cooldown 买股票的最佳时间含冷冻期
    Java 类成员的初始化顺序
    JavaScript 全局
    HTML字符实体
    Java中的toString()方法
    JavaScript 弹窗
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11188901.html
Copyright © 2011-2022 走看看