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

     

  • 相关阅读:
    编码问题
    Linux环境给文件重命名
    FIFO简记
    图像去模糊
    matlab直方图均衡,使用向量优化
    研究方向
    FPGA学习笔记之格雷码、边沿检测、门控时钟
    [转]关于凸优化的一些简单概念
    SSD果然劲爆!
    Qunie问题
  • 原文地址:https://www.cnblogs.com/helloqiufei/p/11735234.html
Copyright © 2020-2023  润新知