91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

插入排序和冒泡排序哪個(gè)更牛逼?

算法與數(shù)據(jù)結(jié)構(gòu) ? 來(lái)源:算法與數(shù)據(jù)結(jié)構(gòu) ? 2019-11-27 16:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

寫在前邊

排序?qū)τ诿總€(gè)開發(fā)者來(lái)講,都多多少少知道幾個(gè)經(jīng)典的排序算法,比如我們之前以動(dòng)畫形式分享的冒泡排序,也包括今天要分享的插入排序。還有一些其他經(jīng)典的排序,小鹿整理的共有十種是面試常問到的,冒泡排序、插入排序、希爾排序、選擇排序、歸并排序、快速排序、堆排序、桶排序、計(jì)數(shù)排序、基數(shù)排序。

雖然我們基本知道了這些排序算法,但是在實(shí)際項(xiàng)目開發(fā)以及面試中往往出乎我們所料。在面試中,經(jīng)常會(huì)被問到各種排序之間的比較;在實(shí)際項(xiàng)目中,往往排序的數(shù)據(jù)不是我們所練習(xí)的整數(shù)。

那么今天我們來(lái)學(xué)習(xí)一下,插入排序比我們之前講的冒泡排序有什么區(qū)別呢?面試官問我們,我們?nèi)绾位卮鹜暾兀?/p>

思維導(dǎo)圖

1

如何分析一個(gè)排序算法?

之前寫的一篇很詳細(xì)的文章。

佩奇學(xué)編程 | 復(fù)雜度分析原來(lái)這么簡(jiǎn)單

分析排序算法已經(jīng)成為我們衡量一個(gè)算法優(yōu)良的重要標(biāo)準(zhǔn),從以下三個(gè)方面入手。

1.1 時(shí)間效率

這里所謂的實(shí)踐效率就是時(shí)間復(fù)雜度,相信大家對(duì)于時(shí)間復(fù)雜度并不陌生。

復(fù)雜度描述的是算法執(zhí)行時(shí)間(或占用空間)與數(shù)據(jù)規(guī)模的增長(zhǎng)關(guān)系。

對(duì)于時(shí)間復(fù)雜度的分析,要把最好時(shí)間復(fù)雜度、最壞時(shí)間復(fù)雜度、平均時(shí)間復(fù)雜度分析出來(lái),分別對(duì)應(yīng)了排序算法的最好排序情況、最壞排序情況以及平均排序效率。

1.2 空間消耗

所謂的空間消耗對(duì)應(yīng)的是空間復(fù)雜度,在排序算法中需要開辟的額外內(nèi)存空間是多少。如果空間復(fù)雜度為 O(1),此時(shí)該排序叫做原地排序。

注意:是額外的內(nèi)存空間,存儲(chǔ)排序數(shù)據(jù)消耗的空間不計(jì)。

1.3 穩(wěn)定性

算法的穩(wěn)定性雖然我們之前接觸的很少,但是穩(wěn)定性也是衡量一個(gè)排序算法的重要標(biāo)準(zhǔn)。什么是穩(wěn)定排序呢?比如有一組有重復(fù)待排序的數(shù)據(jù),排序前后,重復(fù)的數(shù)據(jù)順序不變,此時(shí)該排序?yàn)榉€(wěn)定排序。否則,叫做不穩(wěn)定排序。它在實(shí)際應(yīng)用中非常重要的,今天我們就不多說(shuō),以后會(huì)慢慢分享到。

2

什么是插入排序?

顧名思義,插入排序就是通過(guò)插入的方式來(lái)排序唄,最經(jīng)典的就是打斗地主,可以將打亂的撲克牌作為未排序區(qū)間,手中已經(jīng)排好序的作為排序區(qū)間。每次我們摸牌的過(guò)程,就是從未排序區(qū)間,通過(guò)插入的方式,插入到已排序區(qū)間。那么這個(gè)過(guò)程就稱為插入排序。

3

如何實(shí)現(xiàn)插入排序?

上述插入排序的概念我們已經(jīng)理解了,那么給你一組數(shù)據(jù),如何來(lái)進(jìn)行插入排序呢?

首先我們要將數(shù)據(jù)劃分為兩個(gè)區(qū)間,已排序區(qū)間和未排序區(qū)間。

我們從未排序區(qū)間取出數(shù)據(jù)和已排序區(qū)間的數(shù)據(jù)進(jìn)行比較,如果小于已排序區(qū)間的數(shù)據(jù),那我們就交換數(shù)據(jù)。

如果交換到已排序區(qū)間數(shù)據(jù)不在大于插入的數(shù)據(jù),然后將元素插入進(jìn)去。

最后我們看一下總的插入排序動(dòng)畫和代碼實(shí)現(xiàn)。

4

插入排序的性能

我們通過(guò)上邊的對(duì)插入排序的拆分講解和動(dòng)畫以及代碼實(shí)現(xiàn),想必面試官讓你手寫一個(gè)插入排序可以輕輕松松寫出。但是我們掌握的插入排序知識(shí)還往往不夠,我們?cè)趯?shí)際項(xiàng)目中,還要考慮插入排序的性能怎么樣?因?yàn)椴拍芨玫倪x擇適當(dāng)排序應(yīng)用到項(xiàng)目中去。

4.1 插入排序的穩(wěn)定性

再插入排序中,如果存在重復(fù)數(shù)據(jù)的話,前邊的元素再插入的過(guò)程永遠(yuǎn)在第二個(gè)重復(fù)數(shù)據(jù)的前邊,所以插入排序后的重復(fù)數(shù)據(jù)前后順序不變,所以插入排序是穩(wěn)定排序算法。

4.2 插入排序的空間消耗

我們可以發(fā)現(xiàn),插入排序的移動(dòng)方式,需要消耗常量級(jí)的額外內(nèi)存空間存儲(chǔ),也就是代碼中的 temp,所以時(shí)間復(fù)雜度為 O(1),我們上邊講到,空間復(fù)雜度為O(1)的是原地排序算法。

4.3 插入排序的時(shí)間效率

插入排序的最好情況就是不需要搬移任何數(shù)據(jù),從頭到尾尋找插入數(shù)據(jù),每次只比較一次即可,即一組有序數(shù)據(jù),所以最好時(shí)間復(fù)雜度為O(n)。

如果一組數(shù)據(jù)正好是倒序輸出,那么每次都需要比較移動(dòng)所有數(shù)據(jù),每次移動(dòng)時(shí) n,n 個(gè)數(shù)據(jù)時(shí)間復(fù)雜度為O(n2)。

對(duì)于插入排序的平均時(shí)間復(fù)雜度,每次插入都要移動(dòng)數(shù)據(jù),插入 n 次,所以平均時(shí)間復(fù)雜度為 O(n2)。

5

小結(jié)

我們學(xué)完了今天的插入排序之后,我們回到最初的面試官問題上。插入排序和冒泡排序哪個(gè)更好呢?

我們現(xiàn)在元素移動(dòng)次數(shù)上進(jìn)行分析,如果一組無(wú)序的數(shù)據(jù)通過(guò)冒泡排序排好序之后,它的交換次數(shù)是這種數(shù)據(jù)的逆序度;對(duì)于插入排序來(lái)說(shuō)也是一樣的,移動(dòng)次數(shù)上都是原本數(shù)據(jù)的逆序度。

元素的移動(dòng)次數(shù)是相同的,那我們接下來(lái)看看元素的交換次數(shù)。從代碼上分析可以明顯看出,冒泡排序的一次交換需要三行代碼,而插入排序的交換卻需要一行,所以總的交換次數(shù)冒泡排序大于插入排序。

有小伙伴會(huì)問,這兩行的差別有那么大嗎?移動(dòng)一次,我們可以不計(jì)較,如果數(shù)據(jù)很多,想想下,兩者的效率差別很輕易的就比較出來(lái)了。

雖然冒泡排序的時(shí)間復(fù)雜度和插入排序的時(shí)間復(fù)雜度是相同的,但是我們實(shí)際使用中還是優(yōu)先選擇插入排序。

對(duì)于插入排序還是可以優(yōu)化的,對(duì)了,沒錯(cuò),就是希爾排序,我們?cè)谶@不多分開寫,后期會(huì)繼續(xù)更新。

如果覺得寫的有幫助,歡迎轉(zhuǎn)發(fā)朋友圈圈哦!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4784

    瀏覽量

    98042
  • 排序
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    9975

原文標(biāo)題:動(dòng)畫:面試官問我插入排序和冒泡排序哪個(gè)更牛逼?

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    MAX16050/MAX16051:電壓監(jiān)測(cè)與排序電路的理想選擇

    MAX16050/MAX16051:電壓監(jiān)測(cè)與排序電路的理想選擇 在電子設(shè)計(jì)領(lǐng)域,對(duì)于電壓監(jiān)測(cè)和電源排序的需求日益增長(zhǎng),特別是在服務(wù)器、工作站、網(wǎng)絡(luò)系統(tǒng)等復(fù)雜設(shè)備中。今天,我們就來(lái)深入探討
    的頭像 發(fā)表于 03-02 09:15 ?57次閱讀

    深入解析 LTC2923:電源跟蹤與排序的理想解決方案

    深入解析 LTC2923:電源跟蹤與排序的理想解決方案 在電子設(shè)備的設(shè)計(jì)中,電源的跟蹤和排序至關(guān)重要,它直接影響著設(shè)備的性能和穩(wěn)定性。LTC2923 作為一款強(qiáng)大的電源跟蹤控制器,為我們提供了簡(jiǎn)單
    的頭像 發(fā)表于 02-28 15:35 ?109次閱讀

    ADM6819/ADM6820:簡(jiǎn)單電源排序器的技術(shù)剖析與應(yīng)用指南

    ADM6819/ADM6820:簡(jiǎn)單電源排序器的技術(shù)剖析與應(yīng)用指南 在電子設(shè)備的設(shè)計(jì)中,電源排序對(duì)于確保系統(tǒng)的穩(wěn)定運(yùn)行至關(guān)重要。ADM6819和ADM6820作為具有FET驅(qū)動(dòng)能力的簡(jiǎn)單電源排序
    的頭像 發(fā)表于 02-28 14:25 ?117次閱讀

    探秘ADM1186:高效電壓監(jiān)測(cè)與排序芯片的應(yīng)用指南

    探秘ADM1186:高效電壓監(jiān)測(cè)與排序芯片的應(yīng)用指南 在電子工程師的日常工作中,電源管理是一個(gè)至關(guān)重要的環(huán)節(jié)。良好的電源管理不僅能確保設(shè)備的穩(wěn)定運(yùn)行,還能提高系統(tǒng)的可靠性和性能。今天,我們就來(lái)深入
    的頭像 發(fā)表于 02-28 14:25 ?132次閱讀

    ADM1066:多功能電源監(jiān)控與排序芯片的深度解析

    ADM1066:多功能電源監(jiān)控與排序芯片的深度解析 在電子設(shè)備的設(shè)計(jì)中,電源的監(jiān)控與排序是確保系統(tǒng)穩(wěn)定運(yùn)行的關(guān)鍵環(huán)節(jié)。ADM1066作為一款功能強(qiáng)大的電源監(jiān)控與排序芯片,為多電源系統(tǒng)提供了全面
    的頭像 發(fā)表于 02-28 14:05 ?74次閱讀

    ADM1068:多功能電源監(jiān)控與排序芯片的深度解析

    ADM1068:多功能電源監(jiān)控與排序芯片的深度解析 在電子系統(tǒng)設(shè)計(jì)中,電源的監(jiān)控與排序至關(guān)重要,它直接關(guān)系到系統(tǒng)的穩(wěn)定性和可靠性。今天,我們就來(lái)深入探討一款功能強(qiáng)大的電源監(jiān)控與排序芯片
    的頭像 發(fā)表于 02-28 14:05 ?84次閱讀

    LTC2937:六通道電源排序器與電壓監(jiān)控器的設(shè)計(jì)與應(yīng)用

    LTC2937:六通道電源排序器與電壓監(jiān)控器的設(shè)計(jì)與應(yīng)用 在電子系統(tǒng)設(shè)計(jì)中,電源管理是至關(guān)重要的一環(huán)。合理的電源排序和電壓監(jiān)控能夠確保系統(tǒng)的穩(wěn)定運(yùn)行,避免因電源問題導(dǎo)致的故障和損壞。今天,我們就來(lái)
    的頭像 發(fā)表于 02-28 11:15 ?147次閱讀

    ADM1169:多電源系統(tǒng)的監(jiān)控與排序解決方案

    ADM1169:多電源系統(tǒng)的監(jiān)控與排序解決方案 在電子工程師的日常工作中,多電源系統(tǒng)的監(jiān)控與排序是一個(gè)關(guān)鍵且復(fù)雜的問題。今天要為大家介紹的Analog Devices的ADM1169 Super
    的頭像 發(fā)表于 02-28 11:10 ?126次閱讀

    ADM1166:多電源系統(tǒng)監(jiān)控與排序的理想解決方案

    ADM1166:多電源系統(tǒng)監(jiān)控與排序的理想解決方案 在多電源系統(tǒng)的設(shè)計(jì)中,對(duì)電源的監(jiān)控和排序是至關(guān)重要的環(huán)節(jié)。ADM1166作為一款可配置的監(jiān)控/排序設(shè)備,為多電源系統(tǒng)的電源監(jiān)控和排序
    的頭像 發(fā)表于 02-28 11:10 ?129次閱讀

    探索LM3880:三軌簡(jiǎn)單電源排序器的卓越性能與應(yīng)用

    探索LM3880:三軌簡(jiǎn)單電源排序器的卓越性能與應(yīng)用 在電子設(shè)計(jì)領(lǐng)域,電源管理是一個(gè)至關(guān)重要的環(huán)節(jié)。今天,我們將深入探討德州儀器(TI)推出的LM3880三軌簡(jiǎn)單電源排序器,它為多電壓軌的電源排序
    的頭像 發(fā)表于 02-26 17:20 ?494次閱讀

    MAX16050/MAX16051:具備反向排序功能的電壓監(jiān)控與排序電路

    MAX16050/MAX16051:具備反向排序功能的電壓監(jiān)控與排序電路 在電子系統(tǒng)設(shè)計(jì)中,對(duì)電源電壓的精確監(jiān)控和有序控制至關(guān)重要。Maxim Integrated推出的MAX16050
    的頭像 發(fā)表于 01-31 17:15 ?781次閱讀

    里可以添加本文要記錄的大

    。本文講解不同算法進(jìn)行從小到大的升序排列的過(guò)程。 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 一、冒泡排序 示例:冒泡排序(bubblesort)是一種C語(yǔ)言入門級(jí)的簡(jiǎn)單
    發(fā)表于 01-27 22:05

    C語(yǔ)言插入排序算法和代碼

    插入排序排序算法的一種,它不改變?cè)械男蛄?數(shù)組),而是創(chuàng)建一個(gè)新的序列,在新序列上進(jìn)行操作。   這里以從小到大排序為例進(jìn)行講解。   基本思想及舉例說(shuō)明   插入排序
    發(fā)表于 01-15 06:44

    光纖線芯都是按照什么顏色排序

    多次有朋友留言問到,光纖熔接顏色如何排序,這個(gè)在實(shí)際應(yīng)用中還是比較多的,那么今天我們就不講原理了,直接用圖文簡(jiǎn)單明了講光纖熔接色譜,大家可以了解下。 一、常規(guī)排序 1、4芯的排序:藍(lán)、橙、綠、棕
    的頭像 發(fā)表于 12-19 11:02 ?1375次閱讀

    低成本電源排序器解決方案

    絕大多數(shù)負(fù)載點(diǎn)DC-DC轉(zhuǎn)換器可以將上一個(gè)轉(zhuǎn)換器的電源就緒輸出連接至下一個(gè)轉(zhuǎn)換器的使能輸入,實(shí)現(xiàn)上電排序。這種方法只適合比較簡(jiǎn)單的設(shè)計(jì),不能滿足多數(shù)現(xiàn)代微處理器和DSP的要求一這類器件要求斷電順序必須與上電順序相反。許多廠商針對(duì)這類應(yīng)用推出了可編程排序IC,但器件價(jià)格較為
    的頭像 發(fā)表于 05-21 09:55 ?1185次閱讀
    低成本電源<b class='flag-5'>排序</b>器解決方案