zoukankan      html  css  js  c++  java
  • 冒泡排序(三种实现两种优化)

    排序思想: 相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其它的数进行类似操作。

    初级版

    public static void bubbleSort(int[] arr) {
            int swap;
            for (int i = 0; i < arr.length-1; i++) {
                for (int j = arr.length-1; j > i; j--) {
                    if (arr[j-1] > arr[j]) {
                        swap = arr[j-1];
                        arr[j-1] = arr[j];
                        arr[j] = swap;
                    }
                }
            }
            //打印数组
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }

    改进版1:设置一个标志性变量pos,用于记录每趟排序中最后一次进行交换的位置,由于pos位置之后的记录均已交换到位,故在进行下一趟排序是只要扫描到pos位置即可。

    public static void bubbleSort(int[] arr) {
            int swap;
            int pos=0;//记录本次循环,最后交换的位置
            int k = arr.length -1;
            for (int i = 0; i < arr.length -1; i++) {
                for (int j = 0;j < k ; j++) {
                    if (arr[j] > arr[j+1]) {
                        swap = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = swap;
                        pos = j + 1;
                    }
                }
                k = pos;
            }
            //打印数组
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }

    改进版2:如果数组已经有序,则直接返回。加一个flag

    public static void bubbleSort(int[] arr) {
            int swap;
            int pos=0;//记录本次循环,最后交换的位置
            int k = arr.length -1;
            int flag = 1;//假设已经有序
            for (int i = 0; i < arr.length -1; i++) {
                for (int j = 0;j < k ; j++) {
                    if (arr[j] > arr[j+1]) {
                        swap = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = swap;
                        pos = j + 1;
                        flag = 0;
                    }
                }
                k = pos;
                if(flag == 1){// 如果本趟走完没有交换,则有序
                    break;
                }
            }
            //打印数组
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
  • 相关阅读:
    ant构建Jmeter脚本的build文件配置(build.xml)
    Jmeter加密函数__digest总结
    Python接口自动化测试脚本-实现禅道登录
    转载:windows下安装mac虚拟机(Vmvare+mac)
    jstat监控JVM内存使用、GC回收情况
    Pycharm添加Python文件模板
    总结:Jmeter常用参数化方式
    Mysql添加索引及索引的优缺点
    Mysql常用语法
    性能测试中TPS上不去的原因
  • 原文地址:https://www.cnblogs.com/xingrui/p/9689513.html
Copyright © 2011-2022 走看看