zoukankan      html  css  js  c++  java
  • (三)Java数据结构和算法——冒泡、选择、插入排序算法

    一、冒泡排序

    • 冒泡算法的运作规律如下:

      ①、比较相邻的元素。如果第一个比第二个大,就交换他们两个。

      ②、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数(也就是第一波冒泡完成)。

      ③、针对所有的元素重复以上的步骤,除了最后一个。

      ④、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    • 代码实现
       public static int[] sort(int[] array){
    
             //这里for循环表示总共需要比较多少轮
            for(int i=1;i<array.length;i++){
            // j的范围很关键,这个范围是在逐步缩小的,因为每轮比较都会将最大的放在右边
                for(int j=0;j<array.length-i;j++){
                    if(array[j]>array[j+1]){
                        int temp = array[j+1];
                        array[j+1] = array[j];
                        array[j] = temp;
                    }
                }
            }
    
            return array;
        }
    • 测试
     public static void main(String[] args) {
            int [] array = {9,222,100,4,8,6,35,2,4,1,0};
            Maopao.sort(array);
    
            for(int i=0;i<array.length;i++){
                System.out.println(array[i]);
            }
    
        }
    • 结果

    •  冒泡排序解释:

      冒泡排序是由两个for循环构成,第一个for循环的变量 i 表示总共需要多少轮比较,第二个for循环的变量 j 表示每轮参与比较的元素下标【0,1,......,length-i】,因为每轮比较都会出现一个最大值放在最右边,所以每轮比较后的元素个数都会少一个,这也是为什么 j 的范围是逐渐减小的。相信大家理解之后快速写出一个冒泡排序并不难。

    •  性能分析

    假设参与比较的数组元素个数为 N,则第一轮排序有 N-1 次比较,第二轮有 N-2 次,如此类推,这种序列的求和公式为:

      (N-1)+(N-2)+...+1 = N*(N-1)/2

      当 N 的值很大时,算法比较次数约为 N2/2次比较,忽略减1。

      假设数据是随机的,那么每次比较可能要交换位置,可能不会交换,假设概率为50%,那么交换次数为 N2/4。不过如果是最坏的情况,初始数据是逆序的,那么每次比较都要交换位置。

      交换和比较次数都和N2 成正比。由于常数不算大 O 表示法中,忽略 2 和 4,那么冒泡排序运行都需要 O(N2) 时间级别。

      其实无论何时,只要看见一个循环嵌套在另一个循环中,我们都可以怀疑这个算法的运行时间为 O(N2)级,外层循环执行 N 次,内层循环对每一次外层循环都执行N次(或者几分之N次)。这就意味着大约需要执行N2次某个基本操作。

  • 相关阅读:
    “XXXXX” is damaged and can’t be opened. You should move it to the Trash 解决方案
    深入浅出 eBPF 安全项目 Tracee
    Unity3d开发的知名大型游戏案例
    Unity 3D 拥有强大的编辑界面
    Unity 3D物理引擎详解
    Unity 3D图形用户界面及常用控件
    Unity 3D的视图与相应的基础操作方法
    Unity Technologies 公司开发的三维游戏制作引擎——Unity 3D
    重学计算机
    windows cmd用户操作,添加,设备管理员组,允许修改密码
  • 原文地址:https://www.cnblogs.com/shyroke/p/9391680.html
Copyright © 2011-2022 走看看