首页 > 编程语言 >快速排序 Java代码展示

快速排序 Java代码展示

时间:2022-10-03 16:22:32浏览次数:40  
标签:检索 arr Java 展示 int System ints 排序

我们快速排序的图解放在下面,有一些重复的动作就省略。

java代码如下:

/**
 * @author: 阿久
 * 快速排序
 */
public class SnackOrder {
    public static void main(String[] args) {

    int[] ints = randomNumber(100);
    //printSortNumber(ints);
    long start = System.currentTimeMillis();
    //调用方法,进行快速排序
    quickSort(ints,0,ints.length - 1);
    long end = System.currentTimeMillis();
    System.out.println("耗费时间 = " + (end - start));
    printSortNumber(ints);
    }
    private  static int [] randomNumber(int arrNumber){
        int [] arr = new int[arrNumber];
        Random random = new Random();
        for (int i = 0; i <arr.length; i++) {
            //生成随机数
            int number = random.nextInt();
            arr[i] = number;
        }
        return  arr;
    }
    private static void printSortNumber(int [] arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    /**
     * 定义方法,用来进行快速排序
     * @param arr 定义一个数组
     * @param left 左指针
     * @param right 右指针
     */
    public static void quickSort(int [] arr,int left,int right){
        //进行判断,如果左边索引比右边索引大,是不合法的。直接使用return 结束这个方法
        if (left > right){
            return;
        }
        //定义变量把保存基准数
        int base = arr[left];
        //定义变量 i,指向最左边
        int i = left;
        //定义变量 j,指向最右边
        int j = right;
        //当i 和j 不相遇的时候,再循环中进行检索
        while (i != j){
            //向由j 从右往左检索比基准数小的,如果检索到比基准数小的就停下。
            //如果检索比基准数大的或者相等的,就继续检索
            while(arr[j] >= base && i < j){
                j--;//j 从右往左移动
            }
            //i 从左往右检索
            while (arr[i] <= base && i < j){
                i++;//i 从左往右移动
            }
            //代码走到这里。i停下了,j也停下来链路,然后交换i 和 j 位置的元素
            swap(arr,i,j);
        }
        //如果上面while 循环的条件不成立,会跳出这个循环,往下执行。
        //如果这个条件不成立说明 i 和 j 相遇了
        //如果i 和 j 相遇了,就交换了基准数这个元素和相遇位置的元素
        //把相遇位置的元素赋值给基准数这个位置的元素
        arr[left] = arr[i];
        //把基准数赋值给相遇位置的元素
        arr[i] = base;
        //基准数在这里就归位了,左边的数字都比它小,右边的数字都比它大
        //排基准数的左边
        quickSort(arr,left,i-1);
        //排基准数的右边
        quickSort(arr,j + 1,right);
    }
    private static void swap(int [] arr,int i,int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

希望能帮助到大家!记得点赞和关注哟

标签:检索,arr,Java,展示,int,System,ints,排序
From: https://www.cnblogs.com/ajiu569/p/16750663.html

相关文章