0
点赞
收藏
分享

微信扫一扫

java版快速排序详解

船长_Kevin 2022-04-07 阅读 19
package day04;
/**
 * 关于快速排序的理解
 * 快速排序本质上通过一个数组划分为两个子数组,然后递归地调用自身为每一个子数组进行快速排序来实现的,即算法分为三步:
 * 
 * 1.首先从数组中找一个基准数,然后进行分别检索
 * 
 * 2.接下来就是排序。当第一轮排完之后就会出现左边的全是比基准数小的,右边全是比基准数大的
 * 
 * 3.分别排序之后进入递归,然后继续重复排序操作
 */
public class Exercise_G {
    private static void swap(int[] data, int i, int j) {
        int temp = data[i];
        data[i] = data[j];
        data[j] = temp;
    }
    //传参的个数为三个:data数据数组,start表示从左边哪个位置开始排,end表示排到哪个位置
    private static void subSort(int[] data, int start, int end) {
        if (start < end){
            //如果end<start则说明排序时不合法的
            int base =data[start];//定义基准数
            int low = start;//记录基准数的位置。从左往右检索
            int high = end + 1;//定义变量high让他从右边往左边检索
            //开始检索了
            while (true) {
                //low从左往右检索
                //如果检索到比基准数小的就继续
                //如果比基准数大或者相等,就停止
                while (low < end && data[++low] - base <= 0)
                    ;

                //high从右往左检索
                //如果检索到比基准数小的就停下
                //如果比基准数大或者相等,就继续检索
                while (high > start && data[--high] - base >= 0)
                    ;
                //代码走到这里,则说明两个检索都停下了,接下来就是交换两者位置的元素
                if (low < high) {
                    swap(data, low, high);
                //如果上述走不通,则退出
                } else {
                    break;
                }
            }
            //
            swap(data, start, high);
            //基准数到这里就基本归位了,左边的数据都比他小,右边的数据都比他大
            //递归的方法开始继续排序左边的数据
            subSort(data, start, high - 1);//从开始排序到基准数前一个元素
            //递归的方法排序右边的数据
            subSort(data, high + 1, end);//从基准数下一个元素开始排
        }
    }
    //写快速排序方法
    public static void quickSort(int[] data){
        subSort(data,0,data.length-1);
    }
    public static void main(String[] args) {
        /*方式一:自己输入
         Scanner scan =new Scanner(System.in);
        System.out.println("进入快速排序,请输入10个数:");
        int []data=new int [10];
        for(int i=0;i<10;i++)
        {
            data[i]=scan.nextInt();
        }
         */
        //方式二:
        int[] data = { 12, -12, 10, 23, -10, -14,15, 21, 30 };
        System.out.println("排序之前:" + java.util.Arrays.toString(data));
        quickSort(data);
        System.out.println("排序之后:" + java.util.Arrays.toString(data));
    }
}

运行结果

 

举报

相关推荐

0 条评论