zoukankan      html  css  js  c++  java
  • 【排序算法】冒泡排序(Bubble Sort)


    0. 说明

      参考 维基百科中的冒泡排序

      冒泡排序 (Bubble Sort) 是与插入排序拥有相等的执行时间,但是两种算法在需要的交换次数却很大地不同。

      在最坏的情况,冒泡排序需要 O(n2)  次交换。

      冒泡排序演算法的运作如下:

    1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
    3. 针对所有的元素重复以上的步骤,除了最后一个。
    4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    1. 伪代码

    function bubble_sort (array, length) {
        var i, j;
        for(i from 0 to length-1){
            for(j from 0 to length-1-i){
                if (array[j] > array[j+1])
                    swap(array[j], array[j+1])
            }
        }
    }
    函数冒泡排序输入一个数组名称为array 其长度为length 
        i 从0 到(length - 1) 
            j 从0 到(length - 1 - i) 
                如果array[j] > array[j + 1] 
                    交换array[j] 和array[j + 1] 的值 
                如果结束 
            j循环结束 
        i循环结束 
    函数结束

    2. 助记码 

     i∈[0,N-1) //循环N-1遍
       j∈[0,N-1-i) //每遍循环要处理的无序部分
         swap(j,j+1) //两两排序(升序/降序)

     3. Java 实现

    /**
     * 冒泡排序
     */
    public class Bubble1 {
        // 定义冒泡排序方法 bubbleSort1
        public static int[] bubbleSort1(int[] arr) {
            // 使用循环排序
            for (int i = 0; i < arr.length - 1; i++) {
                for (int j = 0; j < arr.length - 1 - i; j++) {
                    if (arr[j] > arr[j + 1]) {
                        // 将较大值赋值给中间值
                        int e = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = e;
                    }
                }
            }
            return arr;
        }
    
        // 定义遍历输出方法
        public static void output(int[] arr) {
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    
        public static void main(String[] args) {
            // 定义整形数组
            int[] arr1 = {5, 7, 2, 9, 3};
            int[] arr2 = bubbleSort1(arr1);
            output(arr2);
        }
    }

  • 相关阅读:
    bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 后缀自动机在tire树上拓展
    Codeforces Beta Round #64D
    bzoj2300#2300. [HAOI2011]防线修建
    Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined)G. Sum the Fibonacci
    D
    Codeforces Round #503 (by SIS, Div. 1)E. Raining season
    dp优化
    (CCPC-Final 2018)K
    Educational Codeforces Round 48 (Rated for Div. 2)G. Appropriate Team
    Python 匿名函数
  • 原文地址:https://www.cnblogs.com/share23/p/9816203.html
Copyright © 2011-2022 走看看