JAVA中的冒泡排序,选择排序与快速排序

废话不多说了,上代码

public static void main(String[] args) throws Exception {
        int length = 200000;
        long startTime = System.currentTimeMillis();
        int[] bubblingArr = createArr(length);
        bubblingSort(bubblingArr);
        long bubblingTime = System.currentTimeMillis();
        logger.info("bubblingSort最终耗时为:" + (bubblingTime - startTime));
        int[] choiceArr = createArr(length);
        choiceSort(choiceArr);
        long choiceTime = System.currentTimeMillis();
        logger.info("choiceSort最终耗时为:" + (choiceTime - bubblingTime));
        int[] quickArr = createArr(length);
        quickSort(quickArr, 0, quickArr.length-1);
        long quickTime = System.currentTimeMillis();
        logger.info("quickSort最终耗时为:" + (quickTime - choiceTime));
    }

    private static int[] createArr(int length) {
        int[] array = new int[length];
        Random random = new Random();
        for (int i = 0; i < array.length; i++) {
            array[i] = random.nextInt(800);
        }
        return array;
    }

    public static void quickSort(int[] arr, int _left, int _right) {
        int left = _left;
        int right = _right;
        int temp;
        if (left <= right) {   //待排序的元素至少有两个的情况
            temp = arr[left];  //待排序的第一个元素作为基准元素
            while (left != right) {   //从左右两边交替扫描,直到left = right
                while (right > left && arr[right] >= temp)
                    right--;        //从右往左扫描,找到第一个比基准元素小的元素
                arr[left] = arr[right];  //找到这种元素arr[right]后与arr[left]交换
                while (left < right && arr[left] <= temp)
                    left++;         //从左往右扫描,找到第一个比基准元素大的元素
                arr[right] = arr[left];  //找到这种元素arr[left]后,与arr[right]交换

            }
            arr[right] = temp;    //基准元素归位
            quickSort(arr, _left, left - 1);  //对基准元素左边的元素进行递归排序
            quickSort(arr, right + 1, _right);  //对基准元素右边的进行递归排序
        }
    }

    private static void choiceSort(int[] ins) {
        int n = ins.length - 1;//经过n-1次提取最小最大值
        for (int i = 0; i < n; i++) {//控制选择的次数
            int min_index = i;
            for (int j = i + 1; j < n; j++) {
                if (ins[j] < ins[i]) min_index = j;
            }
            if (min_index != i) {
                int temp = ins[i];
                ins[i] = ins[min_index];
                ins[min_index] = temp;
            }
        }
    }

    private static void bubblingSort(int[] a) {
        for (int i = 0; i < a.length - 1; i++) {
            boolean flag = true;
            for (int j = 0; j < a.length - i - 1; j++) { // 内存循环,是每一轮中进行的两两比较
                if (a[j] > a[j + 1]) {
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                    flag = false;
                }
            }
            if (flag) break;
        }
    }

结论

默认情况下快速排序效率最高

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值