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

    原理:比较两个相邻的元素,将值大的元素交换至右端(升序)。

    步骤:第一步,比较第一个数与第二个数的大小,将大的数放到后面

         第二步,比较第二个数与第三个数的大小,将大的数放到后面,依次下去,直到最后两个数比较完成。

       第三步,重复第一与第二步直到全部完成排序。

    例子:int[] arr={5,2,6,0,9};经行排序

    过程:

       第一趟排序:从5开始

        第一次排序,经行第一步,5比2大,则调换位置,完成之后的排序为:     2  5  6  0  9

        第二次排序,经行第二步,6比5大,不要调换位置,完成之后的排序为:    2  5  6  0  9

        第三次排序,经行第二步,6比0大,要调换位置,完成之后的排序为:     2  5  0  6  9

        第四次排序,经行第二步,9比6大,不要调换位置,完成之后的排序为:  2  5  0  6  9

       第二趟排序:从2开始

        第一次排序,2比5小,不要调换位置,完成之后的排序为:       2  5  6  0  9

        第二次排序,5比6小,不要调换位置,完成之后的排序为:       2  5  6  0  9

        第三次排序,0比6小,要调换位置,完成之后的排序为:        2  5  0  6  9

        第四次排序,6比9小,不要调换位置,完成之后的排序为:       2  5  0  6  9

       第三趟排序:从2开始

        第一次排序,2比5小,不要调换位置,完成之后的排序为:       2  5  0  6  9

        第二次排序,0比5小,要调换位置,完成之后的排序为:        2  0  5  6  9

        第三次排序,5比6小,不要调换位置,完成之后的排序为:       2  0  5  6  9

        第四次排序,6比9小,不要调换位置,完成之后的排序为:       2  0  5  6  9

       第四趟排序:从2开始

        第一次排序,0比2小,要调换位置,完成之后的排序为:        0  2  5  6  9

        第二次排序,2比5小,不要调换位置,完成之后的排序为:       0  2  5  6  9

        第三次排序,5比6小,不要调换位置,完成之后的排序为:       0  2  5  6  9

        第四次排序,6比9小,不要调换位置,完成之后的排序为:       0  2  5  6  9

       最终的答案为:0  2  5  6  9

    结论:N个数字经行排序,总共进行N-1趟排序,每趟的排序次数为(N-i)次。

    时间复杂度:

        1.如果数据是正序排列的,那么第一趟就可以把所有数据排好,则比较次数C和记录移动次数M均达到最小值。

                     Cmin = n-1

                     Mmin = 0

        最好的时间复杂度为O(n)。

        2.如果数据是倒序排列的,那么要n-1趟才可以把所有数据排好,则比较次数C和记录移动次数M均达到最大值。

                 

        最坏时间复杂度为:O(n2)。

        综上,平均时间复杂度为:O(n2) 。

    优缺点:  

          优点:比较简单,空间复杂度较低,是稳定的;
          缺点:时间复杂度太高,效率慢;

    代码:

    public class BubbleSort{
        public static void main(String[] args){        
    
            int[] arr={5,2,6,0,9};
    
            System.out.println("排序前的数据:");
            for(int num : arr){
                System.out.print(num+" ");
            }
            //通过两个循环来控制
            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 temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            }        
            System.out.println();
            System.out.println("排序后的数据:");
            for(int num : arr){
                System.out.print(num+" ");
            }
    
        }            
    }

    结果:

                   

     相关链接:

        https://www.cnblogs.com/shen-hua/p/5422676.html
    
  • 相关阅读:
    代码守恒定律
    第一个Dockerfile
    服务器项目白名单设置
    TOMCAT禁用不安全请求方式
    标准单例模式
    二进制,八进制,十进制,十六进制!!!!
    JAVA按层级遍历二叉树
    String的+
    安装 Rational Rose 启动报错:无法启动此程序,因为计算机中丢失 suite objects.dll
    java中文乱码问题
  • 原文地址:https://www.cnblogs.com/Swen3252/p/9438732.html
Copyright © 2011-2022 走看看