• java 排序算法分析


    一、冒泡排序(时间复杂度O(N^2))
    public int[]  bubbling(int[] arr){
            if(arr.length <= 1) return arr;
            for(int i = arr.length; i > 0; i--){    1
             for(int j = 0; j < i-1; j ++){    2
               if(arr[j] > arr[j + 1]){
                        int temp = arr[j];
                        arr[j] = arr[j + 1];       
                        arr[j + 1] = temp;
                    }
                }
            }
           return arr;
        }

    算法流程分析:

          冒泡排序是先找到最大的数,放在第N 个位置, 然后再找到剩下的最大的数放在第 N-1 个位置, 重复一直找下去

      上面的 “1” 是用来控制冒泡的终点的, “2” 是 用来执行冒泡动作的  ,相邻的两个元素之间进行比较,然后互换位置进行对调

    算法复杂度分析:

       因为先冒泡: 0  - N-1 个,其次 0 - N-2 个 依次往下, 所以算法复杂度为O(N^2) 

    二、选择排序(时间复杂度O(N^2))
    public void choose(int[] arr){
            if(arr.length <= 1) return arr;
            for(int i = 0; i < arr.length; i ++){  
                for(int j = i+ 1; j < arr.length; j ++){
                    if(arr[i] > arr[j]){
                        int temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
            return arr;
        }

    算法流程分析:

          选择排序是通过找出所有元素中最小的数, 放在 “0” 位置上, 然后找到剩下的数里面最小的数放在 “1” 位置上, 依次进行:

    所以白话就是: 我先拿第一个数和其他书比较, 但是我要保证我手里面的数字是最小的(怎么保证就是不断比较), 然后把这个数字放在 “0” 位置上面

                            然后依次执行

    算法复杂度分析:

       因为先拿一个数和其他数字进行比较:比较次数     N-1  次,其次  N-2 次 依次往下, 所以算法复杂度为O(N^2) 

    三、插入排序法(时间复杂度O(N^2))
    public void insert(int[] arr){
            if(arr.length <= 1) return arr;
            for(int i = 1; i < arr.length; i ++){   1
             for(int j = 0; j < i; j ++){    2
                if(arr[j] > arr[j + 1]){
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            return (arr);
        }

    算法流程分析:

          插入排序:就像你打扑克, 抓到一张牌,然后再抓一张牌,比较这两张牌,排序这两张牌, 然后再抓到第三张牌, 排序这三张牌,依次如下;

    其中 "1" 就是用来控制比较前几张牌的, “2” 是实现前比较前几张牌的大小的

    算法复杂度分析:

       因为先比较: 2 个,其次 3个  依次往下, 所以算法复杂度为O(N^2) 

    问题: 你的程序是不是有问题, 在比较几个数字之间的大小的顺序是不是弄反了,违背了插入排序的思想,哈哈哈

    四、总结
    

      三种基本的排序算法在时间复杂度上面基本差不多的,所以在排序的时候都可以使用

    但是插入算法的时间复杂度并不稳定,最好的情况(1,2,3,4,5),不需要排序的这种,时间复杂度为 O(N),而

    冒泡排序和选择排序的时间复杂度稳定为O(N^2)

     

  • 相关阅读:
    Allegro PCB Design GXL (legacy) 使用slide无法将走线推挤到焊盘的原因
    OrCAD Capture CIS 16.6 导出BOM
    Altium Designer (17.0) 打印输出指定的层
    Allegro PCB Design GXL (legacy) 将指定的层导出为DXF
    Allegro PCB Design GXL (legacy) 设置十字大光标
    Allegro PCB Design GXL (legacy) 手动更改元器件引脚的网络
    magento产品导入时需要注意的事项
    magento url rewrite
    验证台湾同胞身份证信息
    IE8对css文件的限制
  • 原文地址:https://www.cnblogs.com/helloqiufei/p/11735234.html
Copyright © 2020-2023  润新知