java快速排序原理及代码展示

本文详细介绍了Java中的快速排序算法,包括设置基准数、使用左右指针进行比较和交换,以及递归地对基准数两侧进行排序的过程。算法具有较高的运行效率。
摘要由CSDN通过智能技术生成

java快速排序的原理:

1.在一个数组中,我们想要进行快速排序操作时,必须要先把数组中的一个数设为基准数(base),通常把最左边的数当做基准数

2.定义两个指针左指针(left)和右指针(right),指针先从右侧开始检索,当检索到比基准数小的数时停止,然后左侧指针开始检索,检索比基准数大的数时停止

3.两个指针都检索到并停止之后,交换两个数,然后继续2中的操作

4.当两个指针相遇时,交换指针所在位置的数和基准数,交换完之后,基准数已经归位,并且左边的数都比它小,右边的数都比它大。

5.接着以基准数为中心分成两侧,分别重复进行上述操作,在不符合循环条件时结束,排序完成。

备注:每次交换完基准数和两个指针相交的数后,基准数必定归位。

           也可以用最右边的数当基准数,一样的道理。

创建一个方法,参数有一个数组,一个左指针和一个右指针

public static void quickSort(int arr[],int left,int right){
        //进行判断,左边索引不可以比右边索引大,如果左边比右边大那么排序结束
        if (left>right){
            return;
        }
        int baseNum=arr[left];//基准数
        int i=left;//左指针
        int j=right;//右指针

        //i和j不相遇时,在循环中进行检索,
        while(i!=j){
            //j从右往左进行检索比基准数小的,如果检索到比基准数小的就停下
            while (arr[j]>=baseNum && i<j){
                j--;//从右往左检索
            }
            //i从左往右进行检索比基准数大的,如果检索到比基准数大的就停下
            while (arr[i]<=baseNum && i<j){
                i++;//从左往右检索
            }

            //在都检索到之后,停下并交换i和j
            int temp=arr[i];
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;

        }
        //跳出循环时,代表i和j相遇,此时交换相遇位置的数和基准数
        //将两个指针相交处的元素换到最左边
        arr[left]=arr[i];
        //将基准数,也就是最左边的数换到相交处
        arr[i]=baseNum;

        //此时,左边的数都比基准数小,右边的都比基准数大
        //之后分别排基准数的左边和右边
        //调用方法,重复进行
        quickSort(arr,left,i-1);//归位后的基准数左边
        quickSort(arr,j+1,right);//归位后的基准数右边
    }

下面进行测试:

public static void main(String[] args) {
        //创建数组
        int[] arr=new int[]{6,51,64,32,19,95,14,3,45};
        quickSort(arr,0, arr.length-1);  //调用方法进行排序
        System.out.println(Arrays.toString(arr));  //输出数组
    }

测试结果如下:

可以测试一下程序运行时间,运行效率比普通排序方法要快很多。

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值