插入排序和冒泡排序

插入排序算法:

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

 public static int[] insertSort(int[] numbers){
        for(int i=1;i=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;inumerbers[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)。
希尔排序可以研究一下

你可能感兴趣的:(插入排序和冒泡排序)