美文网首页
插入排序和冒泡排序

插入排序和冒泡排序

作者: 你弄啥来 | 来源:发表于2021-08-24 23:49 被阅读0次

    插入排序算法:

    在一个有序的数组中插入一个数据,要求该数据插入后数组仍然有序。在插入排序中有序的数组就是指已经排好序的区间,新增的数据就是从未排序的区间中取出一条数据插入即可。

     public static int[] insertSort(int[] numbers){
            for(int i=1;i<numbers.length;i++){
                int value = numbers[i];
                int j = i-1;
                for(;j>=0;--j){
                    if(numbers[j+1]>value){
                        numbers[j+1] = numbers[j];
                    }else{
                        break;
                    }
                }
                numbers[j+1]= value;
            }
            return numbers;
        }
    

    冒泡算法:

    每一次都是从数组中的第一个元素跟下一个元素做对比,然后将最大或最小的数据放到最后。最终产生有序或倒叙的排序结果。

      public static int[] popSort(int[] numerbers){
            for(int i=0;i<numerbers.length;i++){
                for(int j=0;j<numerbers.length-i-1;j++){
                    if(numerbers[j]>numerbers[j+1]){
                        int temp = numerbers[j];
                        numerbers[j] = numerbers[j+1];
                        numerbers[j+1] = temp;
                    }
                }
            }
            return numerbers;
        }
    

    有序度

    有序度是指数组中两个数组元素之前是有序的个数。如数组 C : 2,4,3,1,2,7
    有序的元素为:(2,4) (2,3) (2,2) (2,7) (4,7) (3,7) (1,2) (1,7) (2,7)。因此数组C目前的有序度为9。排好序的数据元素个数叫做满有序度,数组C的满有序度为 15 公式n(n-1)/2*,逆序度的定义正好跟有序度相反.

    逆有序度=满有序度-有序度

    冒泡和插入排序的实质就是数据在交换,每交换一次数据有序度就会加1.无论怎么交换,交换的次数是不变的。也就是逆序度不变。
    因此冒泡排序和插入排序交换次数都是一样的,但是冒泡排序在交换数据时,需要三个赋值操作,而插入排序只有一个赋值操作。可以看出来冒泡排序比插入排序更加耗时。

    关于插入排序目前还有一种更高效的排序方式,时间复杂都能够提升到,可以使得性能提升至O(n log2 n)。
    希尔排序可以研究一下

    相关文章

      网友评论

          本文标题:插入排序和冒泡排序

          本文链接:https://www.haomeiwen.com/subject/sigjiltx.html