国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【排序算法】插入排序與希爾排序,你不想知道為什么希爾比插入更快嗎?

這篇具有很好參考價值的文章主要介紹了【排序算法】插入排序與希爾排序,你不想知道為什么希爾比插入更快嗎?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【排序算法】插入排序與希爾排序,你不想知道為什么希爾比插入更快嗎?,算法與數(shù)據(jù)結(jié)構(gòu),排序算法,算法,數(shù)據(jù)結(jié)構(gòu)

??前言

大家好啊!本文阿輝講介紹插入排序和希爾排序,并將解釋為什么希爾排序比插入排序更快。

??插入排序(insertsort)

??原理

插入排序,實際上是我們平時都使用過的排序,為什么這么說呢???想必大家都玩過撲克牌吧,大家是如何整理手中的牌的呢?一定是想下面這樣對吧??
【排序算法】插入排序與希爾排序,你不想知道為什么希爾比插入更快嗎?,算法與數(shù)據(jù)結(jié)構(gòu),排序算法,算法,數(shù)據(jù)結(jié)構(gòu)

沒錯,插入排序也是的么實現(xiàn)的

其實關(guān)于插入排序,一句話足以概括:對于要排序的數(shù)據(jù),從前往后遍歷所有數(shù)據(jù),遍歷到的數(shù)據(jù)與之前的數(shù)據(jù)進行比較,以升序為例,若遍歷位置的數(shù)據(jù)比前一個數(shù)據(jù)小兩者就交換,然后接著與前一個位置比較如果還小就繼續(xù)交換,直到比前一個數(shù)據(jù)大就停止交換
給鐵子們上動圖??
【排序算法】插入排序與希爾排序,你不想知道為什么希爾比插入更快嗎?,算法與數(shù)據(jù)結(jié)構(gòu),排序算法,算法,數(shù)據(jù)結(jié)構(gòu)

??代碼實現(xiàn)(coding)

對于插入排序,我們需要兩個循環(huán)來控制,一個循環(huán)來遍歷所有數(shù)據(jù),另  一個循環(huán)用來遍歷已排好序的部分與要插入數(shù)據(jù)比較

coding

void insertsort(int arr[],int sz){
    int insert = 0;//遍歷要插入的位置
    for(insert = 1;insert < sz;insert++){
        int cur = insert;//記錄待排序的位置
        int pre = cur - 1;//記錄待排序的前一個位置
        while(arr[cur] < arr[pre] && cur > 0){//沒前一個位置大就交換,待排序位置來到0位置就退出循環(huán)
            int tmp = arr[cur];
            arr[cur] = arr[pre];
            arr[pre] = tmp;
            --cur,--pre;//待排序位置和前一個位置同時--
        }
    }
}

??總結(jié)

穩(wěn)定性的定義

說到穩(wěn)定性,與之對應(yīng)就是不穩(wěn)定性,那么排序算法的穩(wěn)定性又為何意呢?通俗地講就是,能保證排序前兩個相等的數(shù)其在序列的前后位置順序與排序后它們的前后位置順序一致。形式化解釋如下:一列數(shù)中,如果Ai = Aj,Ai位于Aj的前置位,那么經(jīng)過升降序排序后Ai仍然位于Aj的前置位

阿輝之前介紹的 冒泡和選擇排序和今天的插入排序,到現(xiàn)在排序中三個最挫的排序已經(jīng)介紹完了,這三個的時間復(fù)雜度都是O(n2),選擇排序是最挫的,冒泡和插入排序都可以做到有穩(wěn)定性而選擇排序做不到

為什么選擇排序不行,一個簡單的例子就能解釋
比如一串數(shù)字 83482,一趟選擇下來,第一個8與2交換,這樣第一個8和第二個8之間的穩(wěn)定性就被打破了

??希爾排序(shellsort)

希爾排序(Shell Sort)是一種基于插入排序的排序算法,也被稱為“縮小增量排序”(Diminishing Increment Sort)。它通過將整個列表分割成多個較小的子序列,并對這些子序列進行插入排序,從而逐步減少排序的范圍,最終完成整個列表的排序。希爾排序在提供了一種平衡了性能和簡單性的排序方法。

好吧上面百度粘的說得不是人話

其實希爾排序就是將數(shù)據(jù)分組,在每個組內(nèi)進行插入排序(對就是直接進行插入排序),那么如何分組呢?設(shè)置一個增量序列,開始的增量通常是數(shù)組長度的一半,然后下一次增量減半,增量設(shè)為gap,給鐵子們上圖
【排序算法】插入排序與希爾排序,你不想知道為什么希爾比插入更快嗎?,算法與數(shù)據(jù)結(jié)構(gòu),排序算法,算法,數(shù)據(jù)結(jié)構(gòu)

??代碼實現(xiàn)(coding)

void shellsort(int arr[],int sz){
    for(int gap = sz/2;gap > 0;gap /= 2){
        for(int i = gap;i < n;++i){//i從每組的第二個數(shù)遍歷,因為每組的第一個數(shù)不用進行插入排序
            int k = arr[i];//記錄當前進行插入排序的數(shù)據(jù)
            for(int j = i;j >= gap && k < arr[j - gap];j -= gap)//如果待插入的數(shù)據(jù)比前一個數(shù)據(jù)小就將前一個數(shù)移到待排序的位置,接著與下一個位置比較
                arr[j] = arr[j-gap];
            arr[j] = k;//最后將要插入的數(shù)據(jù)插到合適的位置
        }
    }
}

希爾排序沒有穩(wěn)定性,是阿輝介紹的第一個時間復(fù)雜度突破O(n2)的排序,時間復(fù)雜度在O(nlogn)~O(n2)之間,有同學(xué)可能會問為啥僅僅分了各組就讓希爾排序更快了,問的好重點來了

??為啥希爾排序能比插入排序更快

其實一個列子就能讓你明白,比如下列這個數(shù)組:
【排序算法】插入排序與希爾排序,你不想知道為什么希爾比插入更快嗎?,算法與數(shù)據(jù)結(jié)構(gòu),排序算法,算法,數(shù)據(jù)結(jié)構(gòu)

對于最后的1插入排序需要交換5次才能來到正確的位置
而如果使用希爾排序,對于第一個增量3,1將與8一組,一次交換就讓1跨過了3和4下標的位置,從而少了2次交換,所以希爾排序比插入排序更快,它降低了交換的次數(shù)


其實,阿輝介紹的這些比較挫的排序,之所以挫就是因為它們大量浪費了交換,后續(xù)阿輝介紹的時間復(fù)雜度在O(nlogn)的排序都減少了交換的次數(shù)
【排序算法】插入排序與希爾排序,你不想知道為什么希爾比插入更快嗎?,算法與數(shù)據(jù)結(jié)構(gòu),排序算法,算法,數(shù)據(jù)結(jié)構(gòu)文章來源地址http://www.zghlxwxcb.cn/news/detail-787666.html

到了這里,關(guān)于【排序算法】插入排序與希爾排序,你不想知道為什么希爾比插入更快嗎?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 八大排序算法之插入排序+希爾排序

    八大排序算法之插入排序+希爾排序

    目錄 一.前言(總體簡介) 關(guān)于插入排序 ?關(guān)于希爾排序: 二.插入排序 函數(shù)首部: 算法思路: 算法分析 插入排序代碼實現(xiàn): 插入排序算法的優(yōu)化前奏:? 三.希爾排序(縮小增量排序) 1.算法思想:? 2.算法拆分解析? 序列分組 分組預(yù)排序: 分組預(yù)排序的另一種實現(xiàn)方式: 希爾排序的實現(xiàn)

    2023年04月09日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)與算法之排序-插入排序(直接插入/折半插入/希爾)

    數(shù)據(jù)結(jié)與算法之排序-插入排序(直接插入/折半插入/希爾)

    文章目錄 目錄 前言 一、什么是插入排序 1.直接插入排序 2.折半插入排序 ? ? ? ? ?3.希爾排序 總結(jié) 理解三種排序,并將三種排序用C++實現(xiàn),借鑒了王卓老師和沒有難學(xué)的知識的圖例 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 ? ? ? ? 插入排序是簡單直觀的排序方

    2024年02月04日
    瀏覽(21)
  • 十大排序算法之插入排序、希爾排序、選擇排序

    十大排序算法之插入排序、希爾排序、選擇排序

    個人主頁:平行線也會相交 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會相交 原創(chuàng) 收錄于專欄【數(shù)據(jù)結(jié)構(gòu)初階(C實現(xiàn))】 本篇主要講解八大排序算法中的三種排序,分別是: 插入排序、希爾排序、選擇排序 。 在我們的日常生活最常見的一個場景就是斗地主,

    2023年04月16日
    瀏覽(20)
  • 【數(shù)據(jù)結(jié)構(gòu)】常見排序算法——常見排序介紹、插入排序、直接插入排序、希爾排序

    【數(shù)據(jù)結(jié)構(gòu)】常見排序算法——常見排序介紹、插入排序、直接插入排序、希爾排序

    ??在計算機科學(xué)中,排序是將一組數(shù)據(jù)按照指定的順序排列的過程。排序算法由于執(zhí)行效率的不同可以分為多種不同的算法。 ??通常情況下,排序算法可以分為兩類,即 內(nèi)部排序和外部排序 。內(nèi)部排序是指數(shù)據(jù)全部加載到內(nèi)存中進行排序,適用于數(shù)據(jù)量較小的情況,而

    2024年02月08日
    瀏覽(34)
  • 數(shù)據(jù)結(jié)構(gòu)與算法:插入排序&希爾排序

    數(shù)據(jù)結(jié)構(gòu)與算法:插入排序&希爾排序

    假設(shè)現(xiàn)在你有一個有序的數(shù)組,你要把一個數(shù)據(jù)插入到數(shù)組中,保證插入后依然有序,要怎么做? 對于人來說,這個問題就像是在整理撲克牌,瞄一眼就知道應(yīng)該插入什么位置。但是對于程序來說,就需要一一對比,直到找到一個位置 左邊比它大,右邊比它小 ,就算找到了

    2024年01月17日
    瀏覽(38)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】排序算法(選擇排序,冒泡排序,插入排序,希爾排序)

    基本概念這了就不浪費時間解釋了,這四種都是很簡單的排序方式,本專欄后續(xù)文章會出歸并排序,計數(shù)排序,快速排序,堆排序,桶排序等排序算法,今天這篇文章中給出選擇排序,冒泡排序,插入排序和希爾排序的實現(xiàn); 如果發(fā)現(xiàn)文章中有錯誤,還請大家指出來,我會非

    2024年02月15日
    瀏覽(96)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】:插入排序與希爾排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】:插入排序與希爾排序

    ?? 個人主頁 : Quitecoder ?? 專欄 : 數(shù)據(jù)結(jié)構(gòu)與算法 歡迎大家來到初階數(shù)據(jù)結(jié)構(gòu)的最后一小節(jié):排序 排序是一種將一組對象按照某種特定順序重新排列的過程。在計算機科學(xué)中,排序是數(shù)據(jù)處理中非?;厩抑匾牟僮鳎梢詭椭藗兏行У乩斫夂头治鰯?shù)據(jù)。排序的順序

    2024年03月18日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】插入排序和希爾排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】插入排序和希爾排序

    ? 目錄 一.插入排序? InsertSort 基本思想 動圖演示 ?特性總結(jié) 二.希爾排序? ShellSort 基本思想 圖例 特性總結(jié) 基本思想 把待排序的記錄按其關(guān)鍵碼值的大小逐個插入到一個已經(jīng)排好序的有序序列中,直到所有的記錄插入完為止,得到一個新的有序序列 。 當插入第i(i=1)個元素

    2023年04月18日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】直接插入排序和希爾排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】直接插入排序和希爾排序

    進入了初階數(shù)據(jù)結(jié)構(gòu)的一個新的主題——排序。所謂排序,就是一串記錄, 按照其中的某幾個或某些的大?。ㄒ欢ǖ囊?guī)則) , 遞增或遞減排列起來的操作 。 排序的 穩(wěn)定性 :在一定的規(guī)則下,兩個值相等的元素,在排序算法處理前后的相對位置是否發(fā)生變化,如果相

    2024年04月13日
    瀏覽(61)
  • 十大排序算法(上)直接插入排序、希爾排序、直接選擇排序、堆排序

    十大排序算法(上)直接插入排序、希爾排序、直接選擇排序、堆排序

    排序,就是使一串記錄,按照其中的某個或某些的大小,遞增或遞減的排列起來的操作。 穩(wěn)定性 :假設(shè)在待排序的序列中,存在多個具有相同內(nèi)容的元素,如果經(jīng)過排序,這些元素的相對位置并不發(fā)生改變,則稱這種排序算法是穩(wěn)定的。 穩(wěn)定的排序可以變成不穩(wěn)定的

    2024年02月05日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包