欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA十大排序算法之插入排序詳解

 更新時(shí)間:2021年08月23日 09:45:25   作者:阿粵Ayue  
這篇文章主要介紹了java中的插入排序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

插入排序

當(dāng)我們?cè)谕鎿淇伺频臅r(shí)候,總是在牌堆里面抽取最頂部的一張然后按順序在手中排列。

插入排序是指在待排序的元素中,假設(shè)前面n-1(其中n>=2)個(gè)數(shù)已經(jīng)是排好順序的,現(xiàn)將第n個(gè)數(shù)插到前面已經(jīng)排好的序列中,然后找到合適自己的位置,使得插入第n個(gè)數(shù)的這個(gè)序列也是排好順序的。

1.對(duì)于未排序數(shù)據(jù)(一般取數(shù)組的二個(gè)元素,把第一個(gè)元素當(dāng)做有序數(shù)組),在已排序序列中從左往右掃描,找到相應(yīng)位置并插入。

2.為了給要插入的元素騰出空間,需要將插入位置之后的已排序元素在都向后移動(dòng)一位。

image-20210728162127494

代碼實(shí)現(xiàn)

對(duì)下面數(shù)組實(shí)現(xiàn)排序:{15, 51, 86, 70, 6, 42, 26, 61, 45, 81, 17, 1}

動(dòng)圖演示

插入排序

代碼實(shí)現(xiàn)

public class InsertionSort {
    public static final int[] ARRAY = {15, 51, 86, 70, 6, 42, 26, 61, 45, 81, 17, 1};
    public static int[] sort(int[] array) {
        if (array.length == 0) {
            return array;
        }
        //待排序數(shù)據(jù),改數(shù)據(jù)之前的已被排序
        int current;
        for (int i = 0; i < array.length - 1; i++) {
            //已被排序數(shù)據(jù)的索引
            int index = i;
            current = array[index + 1];
            //將當(dāng)前元素后移一位
            while (index >= 0 && current < array[index]) {
                array[index + 1] = array[index];
                index--;
            }
            //插入
            array[index + 1] = current;
        }
        return array;
    }

    public static void print(int[] array) {
        for (int i : array) {
            System.out.print(i + "  ");
        }
        System.out.println("");
    }
    public static void main(String[] args) {
        print(ARRAY);
        System.out.println("============================================");
        print(sort(ARRAY));
    }
}

時(shí)間復(fù)雜度

在上面圖示中,第一趟循環(huán)比較一次,第二趟循環(huán)兩次,依次類推,則最后一趟比較n-1次:

1 + 2 + 3 +… + n-1 = n*(n-1)/2

也就是說,在最壞的情況下(逆序),比較的時(shí)間復(fù)雜度為O(n2)

在最優(yōu)的情況下,即while循壞總是假的,只需當(dāng)前數(shù)跟前一個(gè)數(shù)比較一下就可以了,這時(shí)一共需要比較n-1次,時(shí)間復(fù)雜度為O(n)。

算法穩(wěn)定性

在比較的時(shí)候,過兩個(gè)數(shù)相等的話,不會(huì)進(jìn)行移動(dòng),前后兩個(gè)數(shù)的次序不會(huì)發(fā)生改變,所以插入排序是穩(wěn)定的。

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 基于OpenID?Connect及Token?Relay實(shí)現(xiàn)Spring?Cloud?Gateway

    基于OpenID?Connect及Token?Relay實(shí)現(xiàn)Spring?Cloud?Gateway

    這篇文章主要介紹了基于OpenID?Connect及Token?Relay實(shí)現(xiàn)Spring?Cloud?Gateway,Spring?Cloud?Gateway旨在提供一種簡(jiǎn)單而有效的方式來路由到API,并為API提供跨領(lǐng)域的關(guān)注點(diǎn),如:安全性、監(jiān)控/指標(biāo)和彈性
    2022-06-06
  • Java8 自定義CompletableFuture的原理解析

    Java8 自定義CompletableFuture的原理解析

    這篇文章主要介紹了Java8 自定義CompletableFuture的原理解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JAVA中通過自定義注解進(jìn)行數(shù)據(jù)驗(yàn)證的方法

    JAVA中通過自定義注解進(jìn)行數(shù)據(jù)驗(yàn)證的方法

    java 自定義注解驗(yàn)證可自己添加所需要的注解,下面這篇文章主要給大家介紹了關(guān)于JAVA中通過自定義注解進(jìn)行數(shù)據(jù)驗(yàn)證的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Mybatis Mybatis-Plus傳入多個(gè)參數(shù)的處理方式

    Mybatis Mybatis-Plus傳入多個(gè)參數(shù)的處理方式

    這篇文章主要介紹了Mybatis Mybatis-Plus傳入多個(gè)參數(shù)的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Spring websocket并發(fā)發(fā)送消息異常的解決

    Spring websocket并發(fā)發(fā)送消息異常的解決

    本文主要介紹了 Spring websocket并發(fā)發(fā)送消息異常的解決,當(dāng)多個(gè)線程同時(shí)嘗試通過 WebSocket 會(huì)話發(fā)送消息時(shí),會(huì)拋出異常,下面就來解決一下,感興趣的可以了解一下
    2023-09-09
  • SpringBoot?實(shí)現(xiàn)動(dòng)態(tài)添加定時(shí)任務(wù)功能

    SpringBoot?實(shí)現(xiàn)動(dòng)態(tài)添加定時(shí)任務(wù)功能

    這篇文章主要介紹了SpringBoot?動(dòng)態(tài)添加定時(shí)任務(wù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • java中brew安裝rabbitmq以及簡(jiǎn)單實(shí)例

    java中brew安裝rabbitmq以及簡(jiǎn)單實(shí)例

    RabbitMQ是基于AMQP協(xié)議,由Erlang語(yǔ)言開發(fā)的開源消息隊(duì)列系統(tǒng),廣泛應(yīng)用于分布式系統(tǒng)中,用于應(yīng)用程序間的消息傳遞,它支持多種交換機(jī)類型,如直連交換機(jī)、扇形交換機(jī)和主題交換機(jī)等,能夠滿足不同的消息路由需求
    2024-10-10
  • 詳解Java中StringBuffer類常用方法

    詳解Java中StringBuffer類常用方法

    這篇文章主要為大家介紹了java中StringBuffer類常用方法
    2016-01-01
  • Java實(shí)現(xiàn)鼠標(biāo)隨機(jī)移動(dòng)效果的示例代碼

    Java實(shí)現(xiàn)鼠標(biāo)隨機(jī)移動(dòng)效果的示例代碼

    有的時(shí)候我們需要鼠標(biāo)一直滑動(dòng)的情況,為了節(jié)省時(shí)間,本文用Java語(yǔ)言寫了一個(gè)腳本,可以實(shí)現(xiàn)鼠標(biāo)隨機(jī)移動(dòng),感興趣的小伙伴可以了解一下
    2022-05-05
  • SpringCloud zookeeper作為注冊(cè)中心使用介紹

    SpringCloud zookeeper作為注冊(cè)中心使用介紹

    ZooKeeper由雅虎研究院開發(fā),是Google Chubby的開源實(shí)現(xiàn),后來托管到Apache,于2010年11月正式成為Apache的頂級(jí)項(xiàng)目。ZooKeeper是一個(gè)經(jīng)典的分布式數(shù)據(jù)一致性解決方案,致力于為分布式應(yīng)用提供一個(gè)高性能、高可用,且具有嚴(yán)格順序訪問控制能力的分布式協(xié)調(diào)服務(wù)
    2022-11-11

最新評(píng)論