(三)Java数据结构和算法——冒泡、选择、插入排序算法

1、冒泡排序

  • 冒泡算法的运做规律以下:

  ①、比较相邻的元素。若是第一个比第二个大,就交换他们两个。算法

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

  ③、针对全部的元素重复以上的步骤,除了最后一个。性能

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

 

  • 代码实现
   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 的范围是逐渐减少的。相信你们理解以后快速写出一个冒泡排序并不难。spa

  •  性能分析

 

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

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

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

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

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

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

相关文章
相关标签/搜索