zoukankan      html  css  js  c++  java
  • 小白懂算法之冒泡排序

    一.冒牌排序原理

      假设有10个数。

      第一轮循环,第一个数和第二个数比较,如果第一个数大,第一个数和第二个数交换位置,否则不动;接着第二个数和第三个数比较,如果第二个数大,第二个数和第三个数交换位置,否则不动……第九个数和第十个数比较,如果第九个数大,第九个数和第十个数交换位置,否则不动。第一轮循环结束,最大的数挪到了第十个数的位置,比较进行了9次。

      第二轮循环,第一个数和第二个数比较,如果第一个数大,第一个数和第二个数交换位置,否则不动……第八个数和第九个数比较,如果第八个数大,第八个数和第九个数交换位置,否则不动。第二轮循环结束,第二大的数挪到了第九个数的位置,比较进行了8次

      ……

      第九轮循环,第一个数和第二个数比较,如果第一个数大,第一个数和第二个数交换位置,否则不动。第九轮循环结束,倒数第二大的数挪到了第二个数的位置,比较进行了1次。
      总结原理:假设序列中有n个数,前后相邻的两个元素进行比较,比较结果要么不动,要么交换位置

        1.最多比较n-1轮能保证序列排序完毕

        2.第一轮比较的次数是n-1次,之后每轮比较次数依次减1,n-1轮的比较次数为1

        3.每轮都会产生一个最大值,并且该值不参与到下轮的比较中。

    二.图解

    三.代码实现

      语言采用Java来实现

        /**
         *     冒泡排序方法
         * @param arr:需要排序的序列
         * @return
         */
        public static int[] BubbleSortByFor(int[] arr) {
            //两者交换的中间介
            int temp = 0;
            //双重循环
            for(int i=0;i<arr.length-1;i++)    //外层循环的最大轮数为 arr.length-1
                for(int j=0;j<arr.length-1-i;j++) {    //内层循环控制的是每轮的比较次数,每轮过后依次减1
                    //比较相邻两个数,若前面值大于后面值则交换,要么不动
                    if(arr[j]>arr[j+1]) {
                        temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            
            return arr;
        }

      main方法测试:

        public static void main(String[] args) {
            //创建一个无序数组
            int[] arr = new int[] {2,1,5,3,8,3,19,13,2};
            
            //调用冒牌排序方法进行排序,返回一个排序后的数组
            int[] sortedArr = BubbleSortByFor(arr);
            
            //遍历打印 数组的结果
            for(int i=0;i<sortedArr.length;i++) {
                System.out.print(sortedArr[i]+" ");
            }
            
        }
  • 相关阅读:
    VIJOS-P1340 拯救ice-cream(广搜+优先级队列)
    uva 11754 Code Feat
    uva11426 GCD Extreme(II)
    uvalive 4119 Always an Interger
    POJ 1442 Black Box 优先队列
    2014上海网络赛 HDU 5053 the Sum of Cube
    uvalive 4795 Paperweight
    uvalive 4589 Asteroids
    uvalive 4973 Ardenia
    DP——数字游戏
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/13967761.html
Copyright © 2011-2022 走看看