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));
            }
        }

    结果如下:

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

  • 相关阅读:
    XMIND
    android studio 更新 Gradle错误解决方法
    解决下载Android Build-tools 19.1.0失败
    Android Studio怎么删除项目
    android studio 更改背景和设置字体大小
    IOS开发常用技术网站
    Gitbook安装
    深入解析AsyncTask(转)
    Android中Bitmap和Drawable(转)
    提高Android在eclipse下的编译速度
  • 原文地址:https://www.cnblogs.com/klyjb/p/11317213.html
Copyright © 2011-2022 走看看