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

    结果如下:

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

  • 相关阅读:
    [转]读懂概率图模型:从基本概念和参数估计开始
    [转]ResNet讲解
    [转] GPT-2通俗详解
    Linux/IO基础
    Https:深入浅出HTTPS的交互过程
    Poll/Select/Epoll
    IO相关知识
    认真分析mmap:是什么 为什么 怎么用【转】
    页面滚动时导航渐变
    SSH Secure Shell Client的傻瓜式使用方法
  • 原文地址:https://www.cnblogs.com/klyjb/p/11317213.html
Copyright © 2011-2022 走看看