• 冒泡排序


    冒泡排序
      算法如其名,越小的元素会经由交换慢慢“浮”到序列的顶端.
    原理:一次排序,通过相邻的两个元素的比较,将较小的元素交换的序列的首位.

    举例说明

    注意:选择将最小的元素交换到序列的首位或将最大的元素交换到序列的末位或者将最小的元素交换到序列的末位或者将最大的元素交换到序列的首位会导致
    序列遍历的顺序以及判断条件的略微不同,但是原理是完全相同的.


    举例中使用的是将最小的元素交换到序列的首位,故遍历顺序是从序列的末位遍历.更符合算法的名字,像气泡一样从底部浮到上面.

    第一次冒泡:
    原数组a={3,7,2,4}
    4和2比较,4大,不需要交换,a={3,7,2,4}
    2与7比较,2小,交换位置,a={3,2,7,4}
    2与3比较,2小,交换位置,a={2,3,7,4}
    第一次排序完毕
    数组第1个元素确定
    a={2,3,7,4}

    第二次冒泡
    a={2,3,7,4}
    4和7比较,4小,交换位置,a={2,3,4,7}
    4和3比较,4大,不需要交换,a={2,3,4,7}
    第二次排序完毕
    数组前2个元素确定
    a={2,3,4,7}

    第三次冒泡
    a={2,3,4,7}
    7和4比较,7大,不需要交换位置,a={2,3,4,7}
    第三次排序完毕
    数组前3个元素确定
    a={2,3,4,7}

    整体排序完毕
    数组有序
    a={2,3,4,7}

    从例子中我们能看到有规律的几点
    1:冒泡排序的排序次数是序列长度length-1
    2:每一次排序的结束条件是比较到了上一次排序确定的边界.

        public static <T extends Comparable<? super T>> void bubbleSort(T[] arr) {
            int length = arr.length;
            // 遍历次数
            for (int time = 0; time < length; time++) {
                for (int start = length - 1; start > time + 1; start--) {
                    if (arr[start].compareTo(arr[start - 1]) < 0) {
                        // 上移
                        T tmp = arr[start];
                        arr[start] = arr[start - 1];
                        arr[start - 1] = tmp;
                    }
                }
            }
        }
    java实现
  • 相关阅读:
    TreeList 树形控件 实现带三种状态的CheckBox
    SQL 左外连接,右外连接,全连接,内连接(转)
    在DataTable中进行数据查询 (转)
    uva10594 Data Flow最小费用流,两个代码区别不大(我没看出区别),为什么一个对,另一个超时!!
    SGU142 Keyword好题
    uva 10881
    南京理工1747(数论)WA了好多遍!
    CF161D 树形dp
    uva 11646(大水题几何分类)
    求a加到b二进制加法有多少次进位。
  • 原文地址:https://www.cnblogs.com/coldridgeValley/p/4944990.html
Copyright © 2020-2023  润新知