zoukankan      html  css  js  c++  java
  • 白话排序算法--冒泡排序

    前言:

      这两天研究排序的算法,算法理解起来比较抽象,不拿笔划着走着就容易绕进去,所以就想出了以体育课排队列的方式进行演示

      系列的其他篇章的情景同上


    冒泡排序:  重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该      数列已经排序完成。

    情景描述:

      体育课上,老师需要一个纵列(从低到高竖着站一排),集合的时候大家随便凑了一列,但是高低不齐,一共6个人这时老师说,我给你们个办法,按照我的办法,你们自己排列队形。

    1.   从第一个同学开始,如果前一个同学比后一个同学个子高了,就交换位置,否则不动
    2.   第二个再和第三个同学比较,依次类推,直到最后一个同学没人比较了,他是最高的,依次冒泡排序完毕
    3.   排除已确定的同学,重复步骤1和2,持续每次越来越少的同学进行比较换位
    4.   直到需要比较的同学剩一个了,就无需比较,队列已经是由低往高依次排列了

      就这样,同学们换来换去,一遍又一遍,自己完成了队列的排列.....


    代码片段:

      /**
         * 冒泡排序:每次只能确定一位最大的,放置数组末尾 ,下次忽略已经确定的最大值继续比较
         * 优点:稳定
         * 缺点:效率底下(重复相邻数据比较,且每次比较都会进行位置置换)
         * @param arr
         * @return
         */
        public static int[] bubbleSort(int[] arr) {
            int len = arr.length; // 数组长度
            for (int i = 0; i < len; i++) { // 遍历数组,用来限制内循环次数
                for (int j = 1; j < len - i; j++) { // 内循环,依次减少1个次数(即为比较几次,就忽略后几位)
                    if (arr[j - 1] > arr[j]) { // 如果前一位大于后一位,即 前>后,需要交换位置
                        int k = arr[j - 1]; // 把前面的先缓存起来
                        arr[j - 1] = arr[j]; // 让前面的等于后一位
                        arr[j] = k; // 后一位等于前一位之前的缓存值
                    }
                }
            }
            return arr;
        }

       所以,在数据较少的时候还是可以采用的,但数据大量时应该避免使用,选择其他排序方式。

                                  写作不易,难免有疏漏和错误,还请慷慨指正,不错请推荐

       ps:欢迎转载,转载请注明出处:http://www.cnblogs.com/liuyitian/p/4071840.html


                                           每天多学一点点     代码少敲一点点             

  • 相关阅读:
    Visual Studio使用技巧
    排颜色问题——数组 leetcode lintcode
    【简洁】微信为何总令人感觉如此简洁、?(一)
    字符串通信协议解析函数
    我所改造的JSocket适用于任何DELPHI版本
    缓存和字符串相互转换
    TcxDBTreeList导出EXCEL
    TcxGrid导出EXCEL
    TdxAlertWindowManager右下角HINT显示控件
    好用的编辑框布局控件TdxLayoutControl
  • 原文地址:https://www.cnblogs.com/liuyitian/p/4071840.html
Copyright © 2011-2022 走看看