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)

 

原文地址:https://www.cnblogs.com/helloqiufei/p/11735234.html