排序(4)——堆排序

目錄

堆排序(回顧)

基本思路

代碼實現

向下調整排序?AdjustDown

?建堆+排序

時間復雜度

特性總結


堆排序(回顧)

重點回顧戳👉堆排序

基本思路

堆排序(Heapsort)是指利用堆積樹(堆)這種數據結構所設計的一種排序算法,它是選擇排序的一種。它是通過堆來進行選擇數據。需要注意的是排升序要建大堆,排降序建小堆

這里舉例建升序,也就是大堆

①先將數組中的元素向下調整建堆

②循環以下操作:

  1. 交換頭尾
  2. 向下調整(最后一個元素不參與調整)

?

代碼實現

向下調整排序?AdjustDown

void Swap(HPDataType* p1, HPDataType* p2)
{HPDataType tmp = *p1;*p1 = *p2;*p2 = tmp;
}void AdjustDown(int* a, int size, int parent)
{int child = parent * 2 + 1;while (child < size){//建大堆,升序if (child + 1 < size && a[child + 1] > a[child]){++child;}if (a[child] > a[parent]){Swap(&a[child], &a[parent]);parent = child;child = parent * 2 + 1;}else{break;}}}

?建堆+排序

void HeapSort(int* a, int n)
{//向下調整建堆for (int i = (n-1-1)/2; i >= 0; --i){AdjustDown(a, n, i);}int end = n - 1;while (end > 0){Swap(&a[0], &a[end]);AdjustDown(a, end, 0);--end;}
}int main()
{int a[10] = { 4, 6, 2, 1, 5, 8, 2, 9 };int size = sizeof(a) / sizeof(a[0]);HeapSort(a, size);for (int i = 0; i < size; i++){printf("%d ", a[i]);}return 0;
}

時間復雜度

O(N*logN)

特性總結

1. 堆排序使用堆來選數,效率就高了很多。
2. 時間復雜度:O(N*logN)
3. 空間復雜度:O(1)
4. 穩定性:不穩定

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715749.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715749.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715749.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SOCKS5代理、代理IP與網絡安全的奇妙旅程

在數字時代&#xff0c;互聯網安全和隱私成為了熱門話題。從個人瀏覽習慣到企業數據保護&#xff0c;每個人都希望他們的在線活動既安全又私密。在這個背景下&#xff0c;了解SOCKS5代理、代理IP、HTTP協議和網絡安全的基礎知識變得尤為重要。 什么是SOCKS5代理&#xff1f; SO…

鴻蒙系統開發適配注意事項

鴻蒙操作系統&#xff08;HarmonyOS&#xff09;的軟件適配涉及到一些特定的注意事項&#xff0c;以確保應用程序在該操作系統上的正常運行和最佳性能。以下是適配鴻蒙軟件時需要注意的一些關鍵問題&#xff0c;希望對大家有所幫助。北京木奇移動技術有限公司&#xff0c;專業的…

MySQL篇—執行計劃介紹(第二篇,總共三篇)

??博主介紹??&#xff1a; ?又是一天沒白過&#xff0c;我是奈斯&#xff0c;DBA一名? ???擅長Oracle、MySQL、SQLserver、Linux&#xff0c;也在積極的擴展IT方向的其他知識面??? ??????大佬們都喜歡靜靜的看文章&#xff0c;并且也會默默的點贊收藏加關注?…

Python 編輯工具 Jupyter notebook

Jupyter notebook Jupyter Notebook是基于網頁的用于交互計算的應用程序。其可被應用于全過程計算&#xff1a;開發、文檔編寫、運行代碼和展示結果。——Jupyter Notebook官方介紹 官網&#xff1a;Project Jupyter | Home Jupyter Notebook 是一個開源的交互式計算環境&#…

dockerdocker-copose_限制容器cpu和內存

本文目錄 docker的限制方式限制CPU占用限制內存占用 docker-compose docker的限制方式 限制CPU占用 Docker使用--cpus參數來限制容器的CPU資源。該參數指定了分配給容器的CPU核心數量或百分比。 例子&#xff1a;限制CPU使用個數 docker run --cpus2 <imageName>以上…

網頁版圖像處理軟件開發服務:助您項目在市場競爭中脫穎而出

在當今數字化時代&#xff0c;圖像處理在各個行業中扮演著重要的角色&#xff0c;虎克專注于提供定制化的網頁版圖像處理軟件開發服務&#xff0c;為您的項目保駕護航。 1.網頁版圖像處理軟件的定制化需求 1.1行業特定功能 針對不同的業務需求&#xff0c;深入了解行業特點&…

springboot基于web的酒店客房管理系統論文

基于web的酒店客房管理系統 摘要 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了酒店客房管理系統的開發全過程。通過分析酒店客房管理系統管理的不足&#xff0c;創建了一個計算機管理酒店客房管理系統的方案。文…

Redis 之八:Jdeis API 的使用(Java 操作 Redis)

Jedis API 使用 Jedis 是 Redis 官方推薦的 Java 客戶端&#xff0c;它提供了一套豐富的 API 來操作 Redis 服務器。通過 Jedis API&#xff0c;開發者可以方便地在 Java 應用程序中執行 Redis 的命令來實現數據的增刪查改以及各種復雜的數據結構操作。 以下是一些基本的 Jedis…

springboot網站開發-idea開發環境下無法開啟調試Debug模式

springboot網站開發-idea開發環境下無法開啟調試Debug模式的解決辦法。 近期在寫后端代碼的時候&#xff0c;發現&#xff0c;無法開啟調試模式。網上查詢了一下資料&#xff0c;發現需要做如下修改即可開啟調試模式。 如圖所示&#xff0c;把里面的選項&#xff0c;都放棄勾選…

SQLPro Studio:數據庫管理的革命性工具 mac版

SQLPro Studio是一款強大的數據庫管理和開發工具&#xff0c;它旨在提供高效、便捷和安全的數據庫操作體驗。無論是數據庫管理員、開發人員還是數據分析師&#xff0c;SQLPro Studio都能滿足他們在數據庫管理、查詢、設計和維護方面的需求。 SQLPro Studio mac版軟件獲取 首先…

B樹系列(詳解)

目錄 一、B-樹 二、B樹 三、B*樹 四、時間復雜度 五、Mysql與B樹系列 一、B-樹 首先再說B樹的性質以及其他的之前&#xff0c;先要說一聲&#xff0c;好多人都把這個樹叫B減樹&#xff0c;其實不是&#xff0c;他就叫B樹&#xff0c;至于原因我覺的沒必要再這個名字上糾結…

docker 轉為docker-compose(composerize 命令)

可以使用Composerize將Docker命令轉換為Docker Compose文件。 例如&#xff1a;將docker run命令轉換為Docker Compose格式&#xff0c;只需用Composerize運行它&#xff0c;如下所示&#xff1a; composerize docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/…

【JavaSE】異常

異常概述 異常指的是程序在執行的過程中&#xff0c;出現的非正常情況&#xff0c;如果不處理最終會導致JVM的非正常停止。 在Java中&#xff0c;使用不同的類來表示不同的異常&#xff08;正所謂萬物皆對象&#xff0c;因此異常也使用類來表示&#xff09;。一旦程序出現某種…

【HTML】HTML基礎5(特殊字符)

目錄 特殊字符的作用 常用的特殊字符 使用效果 特殊字符的作用 例如 當我在兩個文字間打出空格時 <p>“銀河護衛隊”系列 在漫威電影宇宙中一直是異數般的存在&#xff0c;不僅因為影片主角是一群反英雄&#xff0c;<strong>與超級英雄相比顯得格格不入<…

讀書筆記-三國演義-三英戰呂布

三英戰呂布是《三國演義》中的一段著名戰役&#xff0c;張飛、關羽和劉備三兄弟聯手擊敗了當時的霸主呂布&#xff0c;展現了他們的武藝和忠義。 介紹 "三英戰呂布"是《三國演義》中的一個著名戰役&#xff0c;發生在三國時期&#xff0c;講述了三位蜀漢名將——劉…

LeetCode 刷題 [C++] 第347題.前 K 個高頻元素

題目描述 給你一個整數數組 nums 和一個整數 k &#xff0c;請你返回其中出現頻率前 k 高的元素。你可以按 任意順序 返回答案。 題目分析 據題意可知&#xff0c;我們需要先遍歷整個數組&#xff0c;并統計每個數字出現的次數&#xff0c;保存在哈希表中&#xff1b;對元素…

synchrosized 的可重入特性、死鎖、哲學家就餐問題以及解決死鎖的方法等干貨

文章目錄 &#x1f490;synchrosized的可重入特性關于死鎖&#xff1a;哲學家就餐問題&#x1f4a1;如何避免/解決死鎖 &#x1f490;synchrosized的可重入特性 可重入特性&#xff1a;當一個線程針對一個對象同時加鎖多次&#xff0c;不會構成死鎖&#xff0c;這樣的特性稱為…

前端學習第一天-html基礎

達標要求 網頁的形成過程 常用的瀏覽器及常見的瀏覽器內核 web 標準三層組成 什么是HTML 熟練掌握HTML文檔結構 熟練掌握HTML常用標簽 1. 初識web前端 Web前端是創建Web頁面或App等前端界面呈現給用戶的過程。 Web前端開發是從網頁制作演變而來&#xff0c;早期網站主…

sklearn.preprocessing.RobustScaler(解釋和原理,分位數,四分位差)

提示&#xff1a;sklearn.preprocessing.RobustScaler&#xff08;解釋和原理&#xff0c;分位數&#xff0c;四分位差&#xff09; 文章目錄 [TOC](文章目錄) 一、RobustScaler 是什么&#xff1f;二、代碼1.代碼2.輸出結果 總結 提示&#xff1a;以下是本篇文章正文內容&…

ELK學習

ELK 一、ELK介紹 &#x1f604; “ELK”是三個開源項目的首字母縮寫&#xff0c;這三個項目分別是&#xff1a;Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一個搜索和分析引擎。Logstash 是服務器端數據處理管道&#xff0c;能夠同時從多個來源采集數據&#xff0…