快速排序-八大排序(五)

快速排序不得不说牛逼,比希尔更胜一筹,这次韩老师有点拉跨了(我爱老师),讲的不是很清晰,所以我没采纳,下面这个是比较喜欢的一种方法 通俗易懂 简洁明了

基本思路:

  1.选定p为中心轴
  2.将大于p的数字放在p的右边
  3.将小于p的数字放在p的右边
  4.分别对左右子序列重复前三步操作

首先写一个实现思路1.2.3的方法

//对那个中间数进行分组,小于中间数的放在左边 大于的放在右边
    public static int get_mid(int arr[],int left,int right){
        int p=arr[left];//定义最左边的那个数为中间数
        while (left<right){
        //从右边找第一个小于p的值
            while (arr[right]>=p&&left<right){
                right--;
            }
            //找到则放到p的左边
            if (arr[right]<p){
                arr[left]=arr[right];
            }
           //从左边找第一个大于p的值
            while (arr[left]<=p&&left<right){
                left++;
            }
            //找到则放在p的右边
            if (arr[left]>p){
                arr[right]=arr[left];
            }
        }
        if (left>=right){//left=right说明左右指针相遇 扫描完毕
            arr[left]=p;
        }
        return left;//返回中间数
    }

然后写一个递归调用的方法实现思路4

 //写一个递归调用方法扫描左右两边
    public static void quickSort(int arr[],int left,int right){
        if(left<right){//这个判断一定要加 不然就一直扫描左侧
            int mid=get_mid(arr,left,right);
            quickSort(arr,left,mid-1);//扫描左侧
            quickSort(arr,mid+1,right);//扫描右侧
        }
    }

最后测试

   public static void main(String[] args) {
         int arr[]={4,5,6,72,1,3,0,8,2};
         quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));

这是结果图

在这里插入图片描述

tips:对8000000条数据排序 shell(6.6s)quick(2.6s)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值