插入排序和冒泡排序

插入排序算法:

在一個(gè)有序的數(shù)組中插入一個(gè)數(shù)據(jù),要求該數(shù)據(jù)插入后數(shù)組仍然有序。在插入排序中有序的數(shù)組就是指已經(jīng)排好序的區(qū)間,新增的數(shù)據(jù)就是從未排序的區(qū)間中取出一條數(shù)據(jù)插入即可。

 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;
    }

冒泡算法:

每一次都是從數(shù)組中的第一個(gè)元素跟下一個(gè)元素做對(duì)比,然后將最大或最小的數(shù)據(jù)放到最后。最終產(chǎn)生有序或倒敘的排序結(jié)果。

  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;
    }

有序度

有序度是指數(shù)組中兩個(gè)數(shù)組元素之前是有序的個(gè)數(shù)。如數(shù)組 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)。因此數(shù)組C目前的有序度為9。排好序的數(shù)據(jù)元素個(gè)數(shù)叫做滿有序度,數(shù)組C的滿有序度為 15 公式n(n-1)/2*,逆序度的定義正好跟有序度相反.

逆有序度=滿有序度-有序度

冒泡和插入排序的實(shí)質(zhì)就是數(shù)據(jù)在交換,每交換一次數(shù)據(jù)有序度就會(huì)加1.無(wú)論怎么交換,交換的次數(shù)是不變的。也就是逆序度不變。
因此冒泡排序和插入排序交換次數(shù)都是一樣的,但是冒泡排序在交換數(shù)據(jù)時(shí),需要三個(gè)賦值操作,而插入排序只有一個(gè)賦值操作。可以看出來(lái)冒泡排序比插入排序更加耗時(shí)。

關(guān)于插入排序目前還有一種更高效的排序方式,時(shí)間復(fù)雜都能夠提升到,可以使得性能提升至O(n log2 n)。
希爾排序可以研究一下

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容