日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

【排序算法】-折半插入排序

來源: 責編: 時間:2023-10-06 19:19:23 301觀看
導讀基本思想先來回顧一下直接插入排序的算法思想,就是在前面已經排好序的子序列中尋找一個待插入的位置,然后將待插入元素插入到該位置上。其中尋找插入位置的過程我們是與每一個元素進行比較,相當于順序查找,我們知道順序查

基本思想

先來回顧一下直接插入排序的算法思想,就是在前面已經排好序的子序列中尋找一個待插入的位置,然后將待插入元素插入到該位置上。X6U28資訊網——每日最新資訊28at.com

其中尋找插入位置的過程我們是與每一個元素進行比較,相當于順序查找,我們知道順序查找的效率是比較低的,那么有沒有辦法能夠提高查找插入位置的效率呢?X6U28資訊網——每日最新資訊28at.com

很巧的是,前面的序列既然已經是有序的了,我們何不采用折半查找來找出插入位置呢?折半查找的前提就是序列有序,采用折半查找法查找插入位置的插入排序算法,我們稱其為折半插入排序。X6U28資訊網——每日最新資訊28at.com

圖解排序過程

折半插入算法非常簡單,前提你得掌握直接插入排序和折半查找的算法,來看一個例子:X6U28資訊網——每日最新資訊28at.com

X6U28資訊網——每日最新資訊28at.com

原序列的前四個元素已經有序,則從i位置元素開始進行插入排序,先將i位置元素存入下標0作為哨兵,然后在子序列中尋找待插入位置。X6U28資訊網——每日最新資訊28at.com

這時我們可以采用折半查找法進行查找,定義三個變量lowhighmid,初始low = 1high = i -1,則mid為2X6U28資訊網——每日最新資訊28at.com

讓哨兵位置元素值與mid位置元素值比較,7大于5,所以插入位置應該在右半區,讓low = mid + 1high不變,繼續折半查找:X6U28資訊網——每日最新資訊28at.com

X6U28資訊網——每日最新資訊28at.com

此時high大于low,查找結束,則插入位置即為high + 1,這些都是折半查找的內容,這里不贅述。X6U28資訊網——每日最新資訊28at.com

找到了插入位置為high + 1,可不能直接將待插入元素值存入high + 1位置,這樣會覆蓋原先的元素值,而應該從high + 1位置開始,到i - 1位置為止,將該范圍內的所有元素后移,空開high + 1位置,最后將哨兵位置元素插入到high + 1位置即可。X6U28資訊網——每日最新資訊28at.com

代碼實現

先構建待排序序列:X6U28資訊網——每日最新資訊28at.com

public class ElemType {    int key;}public class SSTable {    ElemType[] n;    int length;    public SSTable() {        this.length = 11;        this.n = new ElemType[this.length + 1];        for (int i = 1; i <= this.length; i++) {            this.n[i] = new ElemType();        }        this.n[1].key = 3;        this.n[2].key = 5;        this.n[3].key = 10;        this.n[4].key = 16;        this.n[5].key = 7;        this.n[6].key = 32;        this.n[7].key = 83;        this.n[8].key = 23;        this.n[9].key = 54;        this.n[10].key = 29;        this.n[11].key = 96;    }}

折半插入排序算法如下:X6U28資訊網——每日最新資訊28at.com

public class Main {    public static void BInsertSort(SSTable t) {        int i, j, low, high, mid;        //從第二個元素開始插入排序        for (i = 2; i <= t.length; ++i) {            //將待插入元素存入哨兵位置            ElemType temp = t.n[i];            //為low和high賦初值            low = 1;            high = i - 1;            while (low <= high) {                mid = (low + high) / 2;                if (temp.key < t.n[mid].key) {                    high = mid - 1;                } else {                    low = mid + 1;                }            }            //將high + 1到i - 1的元素后移            for (j = i - 1; j >= high + 1; --j) {                t.n[j + 1] = t.n[j];            }            //將哨兵位置元素插入j + 1位置            t.n[j + 1] = temp;        }    }    public static void main(String[] args) {        SSTable st = new SSTable();        BInsertSort(st);    }}

性能分析

可以肯定的是,折半插入排序的效率是要高于直接插入排序的,它所需要的關鍵碼比較次數與待排序對象序列的初始排列無關,僅依賴于對象個數。在插入第i個對象時,需要經過「log2i」 + 1次關鍵碼比較才能確定插入位置。X6U28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-12133-0.html【排序算法】-折半插入排序

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 突破性能邊界,OpenSwoole 引領 PHP 網絡編程新時代!

下一篇: 推薦八個上熱搜的GitHub開源項目

標簽:
  • 熱門焦點
  • 小米官宣:2023年上半年出貨量中國第一!

    今日早間,小米電視官方微博帶來消息,稱2023年小米電視上半年出貨量達到了中國第一,同時還表示小米電視的巨屏風暴即將開始。“公布一個好消息2023年#小米電視上半年出貨量中國
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 跑分安卓第一!Redmi K60至尊版8月發布!盧偉冰:目標年度性能之王

    8月5日消息,Redmi K60至尊版將于8月發布,在此前舉行的戰略發布會上,官方該機將搭載搭載天璣9200+處理器,安兔兔V10跑分超177萬分,是目前安卓陣營最高的分數
  • Flowable工作流引擎的科普與實踐

    一.引言當我們在日常工作和業務中需要進行各種審批流程時,可能會面臨一系列技術和業務上的挑戰。手動處理這些審批流程可能會導致開發成本的增加以及業務復雜度的上升。在這
  • 如何通過Python線程池實現異步編程?

    線程池的概念和基本原理線程池是一種并發處理機制,它可以在程序啟動時創建一組線程,并將它們置于等待任務的狀態。當任務到達時,線程池中的某個線程會被喚醒并執行任務,執行完任
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內容創建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準備。請在進入步驟2之前進行解壓。圖
  • 小紅書1周漲粉49W+,我總結了小白可以用的N條漲粉筆記

    作者:黃河懂運營一條性教育視頻,被54萬人&ldquo;珍藏&rdquo;是什么體驗?最近,情感博主@公主是用鮮花做的,火了!僅僅憑借一條視頻,光小紅書就有超過128萬人,為她瘋狂點贊!更瘋狂的是,這
  • 東方甄選單飛:有些鳥注定是關不住的

    文/彭寬鴻編輯/羅卿東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一年多時間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,&ldquo;7
  • 2022爆款:ROG魔霸6 冰川散熱系統持續護航

    喜逢開學季,各大商家開始推出自己的新產品,進行打折促銷活動。對于忠實的端游愛好者來說,能夠擁有一款夢寐以求的筆記本電腦是一件十分開心的事。但是現在的
Top 主站蜘蛛池模板: 克什克腾旗| 喀喇沁旗| 青岛市| 任丘市| 梨树县| 黔南| 古浪县| 十堰市| 开鲁县| 荥经县| 来凤县| 桓台县| 肇源县| 观塘区| 大厂| 綦江县| 库尔勒市| 临漳县| 恩施市| 兴城市| 广河县| 丽江市| 定远县| 遵义县| 龙岩市| 连平县| 江陵县| 郑州市| 大田县| 孝义市| 张家界市| 马山县| 阳西县| 正宁县| 大姚县| 中方县| 永康市| 刚察县| 铁岭县| 韶关市| 麟游县|