美文网首页
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--快速排序

    本文章参考博客:白话经典算法系列之六 快速排序 快速搞定 1.思路 1.数组中选一个基数key,通常是取数组第一个...

  • java--快速排序

    1:基本思想: 快速排序是属于交换类排序,采用不断的比较和移动来实现排序。快速排序是一种非常高效的排序算法,它的实...

  • Java--冒泡排序

    冒泡两次for循环,第一层是不断缩小数组长度,第二层做比较并且交换位置。

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 面试准备--排序

    堆排序 快速排序(simple) 快速排序(regular) 归并排序 Shell排序 插入排序 选择排序 冒泡排序

  • 排序

    插入排序 选择排序 冒泡排序 归并排序 快速排序* 三路快速排序

  • 算法笔记01-排序#2

    快速排序敢叫快速排序,那它一定得快。 快速排序 概述 快速排序也是分治排序的典型,它快,而且是原地排序。不过,要防...

  • PHP 实现快速排序

    导语 这篇了解下快速排序。 快速排序 快速排序(英语:Quicksort),又称划分交换排序(partition-...

  • 快速排序的Python实现

    目录 快速排序的介绍 快速排序的Python实现 快速排序的介绍 快速排序(quick sort)的采用了分治的策...

  • 数据结构与算法 快速排序

    起因:快速排序,又称分区交换排序,简称快排,之前没有了解过,抽空学习一下。 快速排序 1 快速排序 快速排序的定义...

网友评论

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

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