zoukankan      html  css  js  c++  java
  • Java排序算法之冒泡排序

    写在前面的话:这段时间在学习排序算法,想把学习的内容总结一下。从最简单的排序算法开始吧。

    Java算法之冒泡排序

    基本过程:对于一个要排序的数列,我们从复遍历这个数列,一次比较两个数,如果他们顺序错误,我们就交换他们位置。遍历工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

    Java代码实现:

    public class Maopao {
        
        public static void main(String[] args) {
            
            int [] s = {8,3,2,1,7,4,6,5};
            int temp = 0;
            for(int i=0;i<s.length-1;i++){
                for(int j=0;j<s.length-1-i;j++){
                    if(s[j]>s[j+1]){
                        temp=s[j];
                        s[j]=s[j+1];
                        s[j+1]=temp;
                    }
                }
            }
            for(int value:s)
            System.out.print(value);
        }
    
    }

    代码优化:上面代码会出现多余的比较,因为排序可能已经完成,但循环还没有结束,这样就会进行多余的比较。

    public class Maopao {
        
        public static void main(String[] args) {
            
            int [] s = {8,3,2,1,7,4,6,5};
            int temp = 0;
            for(int i=0;i<s.length-1;i++){
                boolean flag = false;//每次重置标记为false
                for(int j=0;j<s.length-1-i;j++){
                    if(s[j]>s[j+1]){
                        temp=s[j];
                        s[j]=s[j+1];
                        s[j+1]=temp;
                        flag=true;
                    }
                }
                if(!flag) break;//如果没有交换跳出循环
            }
            for(int value:s)
            System.out.print(value);
        }
    
    }

    在分析算法性能之前先了解一些概念:

      时间复杂度:需要排序的的关键字的比较次数和相应的移动的次数。

         空间复杂度:分析需要多少辅助的内存。

         稳定性:如果记录两个关键字的A和B它们的值相等,经过排序后它们的位置没有发生交换,那么我们称这个排序算法是稳定的。否则我们称这个排序算法是不稳定的。

    算法性能分析:

    时间复杂度:若原始序列为"正序",则比较次数为n-1次,无需交换。若原始序列为逆序则比较次数和交换次数都为n(n-1)/2;因此冒泡排序总的时间复杂度为O(n*n)。

    空间复杂度:冒泡排序空间复杂度很好,它只需要一个附加单元用于数据交换,所以其空间复杂度为O(1)。

    稳定性:冒泡排序是基于相邻元素的比较,若两个元素相等,按照冒泡排序的思想是不会进行交换的。所以排序后位置不会发生改变。算法是稳定的。

  • 相关阅读:
    [转] 32位 PL/SQL Develope r如何连接64位的Oracle 图解
    UML对象图和包图
    推断的距离1970年1一个月1天从日期数
    Cocos2d-x3.0 RenderTexture(一) 保存
    翻转名单
    Session or Cookie?是否有必要使用Tomcat等一下Web集装箱Session
    【Socket规划】套接字Windows台C语言
    配置主机路由表(route)(两)
    springMVC3得知(五岁以下儿童)--MultiActionController
    JQUERY 选择
  • 原文地址:https://www.cnblogs.com/love-Stefanie/p/6635322.html
Copyright © 2011-2022 走看看