关于冒泡排序和快排比较


一、冒泡排序

    //  冒泡排序
    private static String bubbling() {
        int[] arr = arr();
        int index;
        long startTime = System.nanoTime();
        long startTime1 = System.currentTimeMillis();
        for (int j = arr.length; j > 0; j--) {
            for (int i = 0; i < j; i++) {
                if (i < arr.length - 1) {
                    if (arr[i] > arr[i + 1]) {
                        index = arr[i + 1];
                        arr[i + 1] = arr[i];
                        arr[i] = index;
                        time += 1;
                    }
                }
            }
        }
        return Arrays.toString(arr);
    }

二、快排

    //快排
    private static void sort(int[] arr, int left, int right) throws Exception {
        if(left>=right){
            return ;
        }
        int index= 0;
        index = partition(arr,left,right);
        sort(arr,left,index-1);
        sort(arr,index+1,right);
    }
    
    private static int partition(int[] arr, int left, int right) throws Exception {
        //固定的切分方式
        int key=arr[left];
        while(left<right){
            while(arr[right]>=key&&right>left){//从后半部分向前扫描
                right--;
            }
            arr[left]=arr[right];
            while(arr[left]<=key&&right>left){//从前半部分向后扫描
                left++;
            }
            arr[right]=arr[left];
        }
        arr[right]=key;
        return right;
    }

三、自定义排序(直排)

    //自定义排序
    private static void le(int[] arr, int left, int right) throws Exception {
        if (right == 0){
            return;
        }
        int t;
        while (left < right) {
            while (arr[left] <= arr[right] && left < right) {
                left++;
            }
            if (arr[left] > arr[right] && left < right) {
                t = arr[left];
                arr[left] = arr[right];
                arr[right] = t;
            }
            left++;
        }
        if (left >= right) {
            le(arr, 0, --right);
        }

    }

总结

在相同条件下对这三种排序进行了测试,在随机数在10以内的数组测试结果如下:

  • 冒泡排序所用时间: 14578 ns
  • 快排所用时间:17278 ns
  • 自定义排序所用时间:10259 ns
    在相同条件下对这三种排序进行了测试,在随机数在3000以内的数组测试结果如下:
  • 冒泡排序所用时间: 64 ms
  • 快排所用时间:27 ms
  • 自定义排序所用时间:25 ms
    在相同条件下对这三种排序进行了测试,在随机数在10000以内的数组测试结果如下:
  • 冒泡排序所用时间: 404 ms
  • 快排所用时间:55 ms
  • 自定义排序所用时间:88 ms

测试结果在相同条件下随机数在10左右所用时间:自定义排序 < 冒泡排序 < 快排
测试结果在相同条件下随机数在3000左右所用时间:自定义排序 < 快排 < 冒泡排序
测试结果在相同条件下随机数超过3000所用时间:快排 < 自定义排序 < 冒泡排序
或许自定义排序可能只是快排的一种写法,有知道的请在下方评论。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘凌枫羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值