美文网首页
Java--快速排序

Java--快速排序

作者: 二进制的二哈 | 来源:发表于2019-03-22 18:45 被阅读0次

    本文章参考博客:白话经典算法系列之六 快速排序 快速搞定

    1.思路

    1.数组中选一个基数key,通常是取数组第一个(这时候会在坐标0的位置留下空位);

    2.定义两个指针left,right,分别指向数组最左端和最右端,并依次向数组中间逼近。先从右边开始判断,一直向左移动指针,直到数据小于基数key,将其移动到基数之前的坐标(基数留下的空位),移动完之后也会在坐标位置留下一个空位right;再从左边开始判断,一直向右移动指针,直到数据大于基数key,将其移动到刚才right移动所留下的空位上;最后当left==right时也会有个空位,再将基数放入这个空位中,这样一轮下来,left坐标位置的左侧所有的数都比基数key小,右侧所有的数都比基数大。

    3.数组就一分为二,再用递归,分别对左右两侧的数组进行上述步骤。

    2.代码

    public static void quickSort(int[] array,int leftInput,int rightInput){
            //因为坐标需要不停的变动,不能改动输入的参数(等会递归的时候需要用到),所以新建两个指针
            int left = leftInput;
            int right = rightInput;
            //递归退出的条件
            if (left >= right)
                return;
            //选基数
            int key = array[left];
            while (left < right){
                while(left < right && array[right] >= key){
                    //从右侧找起,找一个比基数小的数
                    right--;
                }
                if (left < right){
                    //将这个数填充到基数刚才的坑上
                    array[left] = array[right];
                    left++;
                }
                while(left < right && array[left] <= key){
                    //从左侧找起,找一个比基数大的数
                    left++;
                }
                if (left < right){
                    //找到了,就将这个数放到刚才的位置上
                    array[right] = array[left];
                    right--;
                }
            }
            //到这  left坐标和right坐标重叠,坐标左边的都比key大,坐标右边的都比key大
            //把key放到left坐标位置上
            array[left] = key;
            //递归左边的数组
            quickSort(array,leftInput,left-1);
            //递归右侧的数组
            quickSort(array,left+1,rightInput);
        }
    
    

    调用示例

    public static void main(String[] args) {
            int[] array = new int[]{11,55,22,14,44,55,33,6};
            quickSort(array,0,array.length-1);
            for(int c : array){
                System.out.print(c+",");
            }
    }
    

    相关文章

      网友评论

          本文标题:Java--快速排序

          本文链接:https://www.haomeiwen.com/subject/bpprvqtx.html