zoukankan      html  css  js  c++  java
  • 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)

     

  • 相关阅读:
    hadoop 学习(一)ubuntu14.04 hadoop 安装
    Java开发笔记(三十四)字符串的赋值及类型转换
    Java开发笔记(三十三)字符包装类型
    Java开发笔记(三十二)字符型与整型相互转化
    Java开发笔记(三十)大小数BigDecimal
    Java开发笔记(二十九)大整数BigInteger
    Java开发笔记(二十八)布尔包装类型
    Java开发笔记(二十七)数值包装类型
    Java开发笔记(二十六)方法的输出参数
    Java开发笔记(二十五)方法的输入参数
  • 原文地址:https://www.cnblogs.com/helloqiufei/p/11735234.html
Copyright © 2011-2022 走看看