最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

圖解Java經(jīng)典算法插入排序的原理與實現(xiàn)

 更新時間:2022年09月10日 09:45:23   作者:Binaire-沐辰  
插入排序的算法描述是一種簡單直觀的排序算法。其原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。本文將用Java語言實現(xiàn)插入排序算法并進行可視化,感興趣的可以了解一下

一、算法介紹

插入排序,也稱為直接插入排序。插入排序是簡單排序中效率最好的一種,它也是學習其他高級排序的基礎(chǔ),比如希爾排序/快速排序,所以非常重要,而它相對于選擇排序的優(yōu)點就在于比較次數(shù)幾乎是少了一半。

二、算法思想

每次將待排序的元素插入到已排序的序列中,直至全部插入完成。

三、算法原理

  • 把所有元素分為兩個序列,將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最后一個元素當成是未排序序列。
  • 從未排序序列中的第一個元素開始,向已排序的序列中插入
  • 倒序遍歷已排序序列,依次和待插入的元素比較,找到一個小于或等于待插入的元素,插入到該元素后面,其余元素向后移動一位

四、動圖演示

五、代碼實現(xiàn)

核心代碼

public class InsertionSort {
    //  插入排序
    public static void sort(Comparable[] a){
       for (int i = 1;i < a.length;i++){
           for (int j = i;j > 0;j--){
               //比較索引j處的值與索引j-1處的值,如果j-1索引處的值大,則交換數(shù)據(jù),反之,則找到了合適的位置,退出循環(huán)
               if (greater(a[j - 1],a[j])){
                   swap(a,j - 1,j);
               }else{
                   break;
               }
           }
       }
    }
    //比較 v 是否大于 w
    public static boolean greater(Comparable v,Comparable w){
        return v.compareTo(w) > 0;
    }
    //數(shù)組元素交換位置
    private static void swap(Comparable[] a,int i,int j){
        Comparable temp;
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}

方法調(diào)用

public class InsertionSortTest {
    public static void main(String[] args) {
        Integer[] arr = {3,44,38,5,47,15,36,26,27};
        InsertionSort.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}
//排序前:{3,44,38,5,47,15,36,26,27}
//排序后:{3,5,15,26,27,36,38,44,47}

六、算法分析

6.1 時間復(fù)雜度

當待排序的 n 個元素是正序排列時,是排序的最佳情況,只需要比較(n-1)次,時間復(fù)雜度是O(n);最壞的情況是該序列是反序排列,此時就需要比較n(n-1)/2次,時間復(fù)雜度為 O(n²)。

插入排序的平均時間復(fù)雜度為 O(n²)

6.2 空間復(fù)雜度

插入排序的空間復(fù)雜度為常數(shù)階O(1)

到此這篇關(guān)于圖解Java經(jīng)典算法插入排序的原理與實現(xiàn)的文章就介紹到這了,更多相關(guān)Java插入排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

二连浩特市| 县级市| 富裕县| 定兴县| 波密县| 体育| 昌图县| 绍兴县| 舞阳县| 邵阳县| 山丹县| 平阳县| 东阿县| 马关县| 廉江市| 高密市| 梨树县| 扎赉特旗| 陵川县| 潞城市| 宜川县| 巴林右旗| 灵寿县| 柏乡县| 河西区| 孟村| 盐池县| 余庆县| 贵港市| 云梦县| 莒南县| 宜兴市| 红原县| 黔西| 泰安市| 台安县| 惠来县| 上栗县| 得荣县| 西乌| 彭泽县|