zoukankan      html  css  js  c++  java
  • java 冒泡排序

    冒泡排序:

    一种交换排序,基本思想是两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止

    比如数组{9,1,5,8,3,7,6,2}

    使用冒泡排序-->

        第一轮  [1, 5, 8, 3, 7, 6, 2, 9]

        第二轮  [1, 5, 3, 7, 6, 2, 8, 9]

        第三轮  [1, 3, 5, 6, 2, 7, 8, 9]

        第四轮  [1, 3, 5, 2, 6, 7, 8, 9]

        第五轮  [1, 3, 2, 5, 6, 7, 8, 9]

        第六轮  [1, 2, 3, 5, 6, 7, 8, 9]

        第七轮  [1, 2, 3, 5, 6, 7, 8, 9]

        第八轮  [1, 2, 3, 5, 6, 7, 8, 9]

        第九轮  [1, 2, 3, 5, 6, 7, 8, 9]

    每轮都会有一个之排序到正确位置;

    冒泡排序的标准代码:

    void BubbleSort(vector<int>& vec)
    {
        int n = vec.size();
        for (int i = 0; i < n; ++i)
        {
            for (int j = n - 2; j >= i; --j) //注意j是从后往前循环
            {
                if (vec[j] > vec[j + 1]) 
                    swap(vec[j], vec[j + 1]);//替换元素的方法
            }
        }
    }

    如数组 {2,1,3,4,5,6,7,8,9} 

    使用冒泡排序-->

        第一轮  [1, 2, 3, 5, 6, 7, 8, 9]

        第二轮  [1, 2, 3, 5, 6, 7, 8, 9]

        第三轮  [1, 2, 3, 5, 6, 7, 8, 9]

        第四轮  [1, 2, 3, 5, 6, 7, 8, 9]

        第五轮  [1, 2, 3, 5, 6, 7, 8, 9]

        第六轮  [1, 2, 3, 5, 6, 7, 8, 9]

        第七轮  [1, 2, 3, 5, 6, 7, 8, 9]

        第八轮  [1, 2, 3, 5, 6, 7, 8, 9]

        第九轮  [1, 2, 3, 5, 6, 7, 8, 9]

    可以看到,在序列基本有序的情况下,在第一次排序后就已经完全有序,但此时算法仍在不断的进行循环判断,这种无意义的循环判断明显的降低了效率,因此,为了减少这种无意义的判断,我们可以将算法作如下改进:

       public static void BubbleSort(int[] vec)
        {
            int n = vec.length;
            boolean flag = true;
            for (int i = 0; i < n && flag; ++i)
            {
                flag = false;
                for (int j = 0; j <n-1-i; j++)
                {
                    if (vec[j] > vec[j + 1]) {
                        int temp =  vec[j];
                        vec[j] = vec[j + 1];
                        vec[j + 1] = temp;
                        flag = true;  
                    }
                }
                System.out.println(Arrays.toString(vec));
            }
        }

    结果如下:

    可以看到明显的减少了无意义的循环判断 

  • 相关阅读:
    linux扩展分区
    linux开机出现initramfs无法进入系统
    openCV编译安装-MSCV-Windows10-Qt
    Qt一键部署配置(Qt程序打包)
    Part8 升序排序 和降序排序
    Part7-.简单查询1
    Part6-向表中插入数据
    Part5-修改表(添加字段、删除字段、查看删除是否成功)
    Part4-删除表
    Part3-复制表
  • 原文地址:https://www.cnblogs.com/klyjb/p/11317213.html
Copyright © 2011-2022 走看看