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

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

我們一起聊聊C#堆排序算法

來源: 責編: 時間:2023-10-10 18:31:11 263觀看
導讀前言堆排序是一種高效的排序算法,基于二叉堆數據結構實現。它具有穩定性、時間復雜度為O(nlogn)和空間復雜度為O(1)的特點。堆排序實現原理構建最大堆:將待排序數組構建成一個最大堆,即滿足父節點大于等于子節點的特性。

前言

堆排序是一種高效的排序算法,基于二叉堆數據結構實現。它具有穩定性、時間復雜度為O(nlogn)和空間復雜度為O(1)的特點。5rm28資訊網——每日最新資訊28at.com

堆排序實現原理

  1. 構建最大堆:將待排序數組構建成一個最大堆,即滿足父節點大于等于子節點的特性。
  2. 將堆頂元素與最后一個元素交換:將最大堆的堆頂元素與堆中的最后一個元素交換位置,將最大元素放到了數組的末尾。
  3. 重新調整堆:對剩余的n-1個元素進行堆調整,即將堆頂元素下沉,重新形成最大堆。
  4. 重復步驟2和3,直到堆中的所有元素都被排列好。

堆排序代碼實現

public static void HeapSort(int[] array)        {            int arrayLength = array.Length;            //構建最大堆            for (int i = arrayLength / 2 - 1; i >= 0; i--)                Heapify(array, arrayLength, i);            //依次取出堆頂元素,并重新調整堆            for (int i = arrayLength - 1; i >= 0; i--)            {                //將堆頂元素與當前最后一個元素交換                int temp = array[0];                array[0] = array[i];                array[i] = temp;                //重新調整堆                Heapify(array, i, 0);            }        }        private static void Heapify(int[] arr, int n, int i)        {            int largest = i; //假設父節點最大            int left = 2 * i + 1; //左子節點            int right = 2 * i + 2; //右子節點            //如果左子節點大于父節點,則更新最大值            if (left < n && arr[left] > arr[largest])                largest = left;            //如果右子節點大于父節點和左子節點,則更新最大值            if (right < n && arr[right] > arr[largest])                largest = right;            //如果最大值不是當前父節點,則交換父節點和最大值,并繼續向下調整堆            if (largest != i)            {                int swap = arr[i];                arr[i] = arr[largest];                arr[largest] = swap;                Heapify(arr, n, largest);            }        }        public static void HeapSortRun()        {            int[] array = { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3, 99, 888, 0, -1 };            Console.WriteLine("排序前數組:" + string.Join(", ", array));            HeapSort(array);            Console.WriteLine("排序后數組:" + string.Join(", ", array));        }

運行結果

圖片圖片5rm28資訊網——每日最新資訊28at.com

總結

堆排序是一種高效的排序算法,通過構建最大堆和反復調整堆的操作,實現對數組的排序。其時間復雜度為O(nlogn),并且具有較好的穩定性和空間效率。但是由于其涉及大量的元素交換操作,所以在實際應用中,可能不如快速排序等算法效率高。5rm28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-12710-0.html我們一起聊聊C#堆排序算法

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

上一篇: 兩萬字 + 十張圖剖析Spring依賴注入和SpEL表達式

下一篇: 再使用System.out.println()打印收拾東西回家

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • Redmi Pad評測:紅米充滿野心的一次嘗試

    從Note系列到K系列,從藍牙耳機到筆記本電腦,紅米不知不覺之間也已經形成了自己頗有競爭力的產品體系,在中端和次旗艦市場上甚至要比小米新機的表現來得更好,正所謂“大丈夫生居
  • 2023 年的 Node.js 生態系統

    隨著技術的不斷演進和創新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態系統,可以幫助開發人員更快地實現復雜的應用。本文就來看看 Node.js 最新的生
  • Flowable工作流引擎的科普與實踐

    一.引言當我們在日常工作和業務中需要進行各種審批流程時,可能會面臨一系列技術和業務上的挑戰。手動處理這些審批流程可能會導致開發成本的增加以及業務復雜度的上升。在這
  • 一個注解實現接口冪等,這樣才優雅!

    場景碼猿慢病云管理系統中其實高并發的場景不是很多,沒有必要每個接口都去考慮并發高的場景,比如添加住院患者的這個接口,具體的業務代碼就不貼了,業務偽代碼如下:圖片上述代碼有
  • 拼多多APP上線本地生活入口,群雄逐鹿萬億市場

    Tech星球(微信ID:tech618)文 | 陳橋輝 Tech星球獨家獲悉,拼多多在其APP內上線了&ldquo;本地生活&rdquo;入口,位置較深,位于首頁的&ldquo;充值中心&rdquo;內,目前主要售賣美食相關的
  • 國行版三星Galaxy Z Fold5/Z Flip5發布 售價7499元起

    2023年8月3日,三星電子舉行Galaxy新品中國發布會,正式在國內推出了新一代折疊屏智能手機三星Galaxy Z Fold5與Galaxy Z Flip5,以及三星Galaxy Tab S9
  • OPPO K11評測:旗艦級IMX890加持 2000元檔最強影像手機

    【Techweb評測】中端機型用戶群體巨大,占了中國目前手機市場的大頭,一直以來都是各手機品牌的“必爭之地”,其中OPPO K系列機型一直以來都以高品質、
  • AI藝術欣賞體驗會在上海梅賽德斯奔馳中心音樂俱樂部上演

    光影交錯的鏡像世界,虛實幻化的視覺奇觀,虛擬偶像與真人共同主持,這些場景都出現在2019世界人工智能大會的舞臺上。8月29日至31日,“AI藝術欣賞體驗會”在上海
Top 主站蜘蛛池模板: 永吉县| 宜昌市| 高台县| 大宁县| 嘉义市| 伊川县| 延长县| 花垣县| 叙永县| 肥城市| 新营市| 招远市| 友谊县| 灌云县| 神木县| 新乡市| 天峻县| 松原市| 宾阳县| 柳林县| 广饶县| 佛山市| 长寿区| 凭祥市| 年辖:市辖区| 静海县| 崇仁县| 霍邱县| 阜新市| 瑞安市| 丰城市| 鄂尔多斯市| 苍南县| 独山县| 渝中区| 安国市| 岳阳市| 出国| 柞水县| 信丰县| 志丹县|