• 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)。

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

  • 相关阅读:
    [Debug] A strange error encountered today in ROS
    实操 | 安装一台3D打印机
    实操 | Getting started with Baxter Research Robot ...
    学习笔记 | What is Monocular Vision?
    路线图 | Roadmap of SLAM Research
    路线图 | Road-map of Cracking the Coding Interview as a C++ Developer
    实操 | Implementing Cartographer ROS on TurtleBots
    实操 | Implementing Google's Open Source Slam "Cartographer" demos in ROS / rviz
    科技新闻 | Google's Open Source SLAM Library ---- Cartographer
    实操 | Implementing "slam_karto" package on a Freight robot
  • 原文地址:https://www.cnblogs.com/love-Stefanie/p/6635322.html
Copyright © 2020-2023  润新知