快速排序【Java实现】

news/2024/5/19 21:14:10 标签: 快速排序, 插入排序

在这里插入图片描述

    public static void main(String[] args) {
        int arr[] = {60,30,70,90,50,10,40,80};
        System.out.println("排序前:"+ Arrays.toString(arr));
        quickSort(arr,0,arr.length-1);
    }

    /*
     * 左标记的作用是找到一个比基准值pivot大的数字
     * 右标记的作用是找到一个比基准值pivot小的数字
     *
     * */

    public static void quickSort(int[] arr,int left,int right){
        //进行判断,left不能比right大
        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位置的元素
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        //代码走到这里 说明 i=j
        // i和j相遇了,交换基准数和相遇位置的元素
        arr[left] = arr[i];
        arr[i] = base;
        //基准数在这里归位了,左边的数字都比他小,右边的数字都比他大
        //基准数归位后,排基准数的左边。
        quickSort(arr,left,i-1);
        //排基准数的右边
        quickSort(arr,i+1,right);

        System.out.println(Arrays.toString(arr));
    }

运行结果:

排序前:[60, 30, 70, 90, 50, 10, 40, 80]
[10, 30, 40, 50, 60, 90, 70, 80]
[10, 30, 40, 50, 60, 90, 70, 80]
[10, 30, 40, 50, 60, 90, 70, 80]
[10, 30, 40, 50, 60, 90, 70, 80]
[10, 30, 40, 50, 60, 70, 80, 90]
[10, 30, 40, 50, 60, 70, 80, 90]
[10, 30, 40, 50, 60, 70, 80, 90]
[10, 30, 40, 50, 60, 70, 80, 90]

http://www.niftyadmin.cn/n/1530431.html

相关文章

【SmartGit】SmartGit.破.解

【SmartGit】SmartGit无限期使用教程 感谢大佬们提供的资源https://gitee.com/pedoc/crackSmartGit 一、首先安装好SmartGit&#xff0c;安装过程请自行百度 二、打开Gitee链接下载资源 https://gitee.com/pedoc/crackSmartGit/releases 下载下来后就是这两个东西&#xf…

this关键字使用

package cn.dali.code03; /*目的&#xff1a; * 输出格式&#xff1a;XXX是哥哥&#xff0c;XXX是弟弟 * * 当成员变量与局部变量重复的时候&#xff0c;方法内使用变量遵循就近原则&#xff0c;所以方法内的name为弟弟 * 区分的方法就是使用this关键字 * 对于方法内部的this来…

Scanner使用方法

package cn.dali.code05;import java.util.Scanner;//导包&#xff0c;除了lang包之外其他都需要导包public class scanner {public static void main(String[] args) {Scanner sc new Scanner(System.in);int i sc.nextInt();System.out.println("输入的数字是"i)…

匿名对象使用方法

package cn.dali.code06;import java.util.Scanner;/*普通创建对象格式&#xff1a;* 类名称 对象名称 new 类名称();** 匿名对象创建格式&#xff1a;* new 类名称();** 匿名对象成员变量或者方法调用格式:* new 类名称().成员变量或者方法** 注意&#xff1a;* 匿名对象只能…

Random类基本使用方法

package cn.dali.code07; import java.util.Random; /*Random也是在util类当中 * 常用的成员方法有两种 * 第一种是&#xff1a;nextInt();无参数型&#xff0c;随机一个int范围内的数字&#xff0c;包括负数 * 第二种是&#xff1a;nextInt(int n) * 返回一个随机数&#xff0…

对象数组

package cn.dali.code08; /*对象数组*/public class ArrayOfObject {public static void main(String[] args) {Person [] arrayA new Person [3];Person p1 new Person("小A",10);Person p2 new Person("小B",15);Person p3 new Person("小C&quo…

集合如何存储基本数据类型

package cn.dali.code09;import java.util.ArrayList;/*集合存储基本数据类型的方法&#xff1a; * 使用包装类把基本类型包装成引用类型&#xff0c;这样集合就可以存储了。 * * 包装类&#xff1a;可以把基本类型包装成一个类 * * 自动装箱&#xff1a; * 基本类型--…

JAVA中字符串类

package cn.dali.code10; /*字符串 String 引用类型 * 包&#xff1a;java.lang * 特点&#xff1a; * 字符串内容不可以改变 * 字符串可以被共享使用&#xff0c;达到节省内存的作用 * 字符串的存储方式相当于C语言中的字符串存储方式&#xff0c;char类型的…