堆排序(算法題)

在這里插入圖片描述

#include <bits/stdc++.h>
using namespace std;const int N = 100010;  // 堆數組的最大容量
int h[N], s;           // h[]存儲堆元素,s表示當前堆的大小// 下沉操作:調整以i為根的子樹,維護小頂堆性質
void down(int i) {int t = i;  // t記錄當前節點及其子節點中的最小值位置// 檢查左子節點(2*i)是否存在,若更小則更新tif (2 * i <= s && h[i] > h[2 * i]) t = 2 * i;// 檢查右子節點(2*i+1)是否存在,且是否比當前t位置的更小if (2 * i + 1 <= s && h[t] > h[2 * i + 1]) t = 2 * i + 1;// 若t發生變化,說明需要交換并繼續調整if (t != i) {swap(h[t], h[i]);  // 交換當前節點與更小的子節點down(t);           // 遞歸調整交換后的子樹}
}int main() {int n, m;cin >> n >> m;        // 輸入元素總數n和需要輸出的前m小元素個數for (int i = 1; i <= n; i++) cin >> h[i];  // 輸入數組(堆的初始狀態)s = n;  // 初始化堆大小為n// 構建初始堆:從最后一個非葉子節點開始,自底向上調整// 模擬:例如n=5時,i從2開始處理,然后i=1。每個節點下沉到合適位置// 這樣可以更短的時間復雜度構建for (int i = n / 2; i; i--) down(i);// 輸出前m小元素:每次取堆頂(最小值),然后維護堆while (m--) {cout << h[1] << ' ';  // 輸出當前堆頂(最小元素)// 刪除堆頂操作:用最后一個元素覆蓋堆頂,堆大小減1h[1] = h[s]; s--;// 調整新堆頂元素,使其下沉到合適位置// 模擬:例如將原本最后的元素放到堆頂后,可能破壞堆結構,需要逐層比較下沉down(1); }return 0;
}/*
模擬示例(n=5, m=3,初始數組[3,1,2,4,5]):
1. 初始建堆:- i=2(元素1):無子節點,無需調整- i=1(元素3):- 比較左子節點1(更小),交換3和1 → 數組[1,3,2,4,5]- 遞歸調整位置2(原3):- 比較子節點4和5,無需調整
2. 第一輪輸出:- 輸出1 → 堆頂替換為5,s=4 → 數組[5,3,2,4]- 調整堆頂5:- 左子3 > 右子2,交換5和2 → [2,3,5,4]- 遞歸調整位置3(5),無子節點,停止
3. 第二輪輸出:- 輸出2 → 堆頂替換為4,s=3 → 數組[4,3,5]- 調整堆頂4:- 左子3更小,交換4和3 → [3,4,5]
4. 第三輪輸出:- 輸出3 → 堆頂替換為5,s=2 → 數組[5,4]- 調整堆頂5:- 左子4更小,交換 → [4,5]
最終輸出序列:1 2 3
*/

本篇參考了acwing算法基礎課。

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

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

相關文章

極狐GitLab 如何將項目共享給群組?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 共享項目和群組 (BASIC ALL) 在極狐GitLab 16.10 中&#xff0c;更改為在成員頁面的成員選項卡上顯示被邀請群組成員&#xf…

用 CodyBuddy 幫我寫自動化運維腳本

我正在參加CodeBuddy「首席試玩官」內容創作大賽&#xff0c;本文所使用的 CodeBuddy 免費下載鏈接&#xff1a;騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴”。 #CodeBuddy首席試玩官 背景 我個人是非常喜歡 Jenkins 自動化部署工具的&#xff0c;之前都是手寫 Jenki…

基于windows安裝MySQL8.0.40

基于windows安裝MySQL8.0.40 基于windows 安裝 MySQL8.0.40&#xff0c;解壓文件到D:\mysql-8.0.40-winx64 在D:\mysql-8.0.40-winx64目錄下創建my.ini文件&#xff0c;并更新一下內容 [client] #客戶端設置&#xff0c;即客戶端默認的連接參數 # 設置mysql客戶端連接服務…

Python小酷庫系列:5個常用的dict屬性化訪問擴展庫

5個常用的dict屬性化訪問擴展庫 嵌套結構高級功能性能綜合建議 在前面我們詳細講解了 Box和 Munch這兩個dict屬性化訪問的擴展庫&#xff0c;總體而言它們主要用于提升配置文件數據、JSON對象數據的可讀性&#xff0c;減少了代碼中雙引號。在這一領域中還有dotmap、addict 和…

OC語言學習——面向對象(下)

一、OC的包裝類 OC提供了NSValue、NSNumber來封裝C語言基本類型&#xff08;short、int、float等&#xff09;。 在 Objective-C 中&#xff0c;**包裝類&#xff08;Wrapper Classes&#xff09;**是用來把基本數據類型&#xff08;如 int、float、char 等&#xff09;“包裝…

密碼學系列 - SR25519與ED25519

SR25519 SR25519 是一種高級的數字簽名算法&#xff0c;它基于 Schnorr 簽名方案&#xff0c;使用的是 Curve25519 橢圓曲線。這種簽名算法在密碼學社區中廣受歡迎&#xff0c;特別是在區塊鏈和加密貨幣領域。以下是關于 SR25519 的詳細介紹。 SR25519 簡介 SR25519 是一種 …

Vue3源碼學習7-PatchFlags使用位算符

文章目錄 前言? 一、基礎知識&#xff1a;什么是二進制&#xff1f;? 二、位運算的基本操作? 三、左移運算 <<? 四、實際用途&#xff1a;如何用于狀態標記&#xff08;PatchFlags&#xff09;? 五、組合多個狀態標記? 六、小結口訣&#xff08;記憶&#xff09;?…

在 Vue 2 中使用 qrcode 庫生成二維碼

&#x1f31f; 前言 歡迎來到我的技術小宇宙&#xff01;&#x1f30c; 這里不僅是我記錄技術點滴的后花園&#xff0c;也是我分享學習心得和項目經驗的樂園。&#x1f4da; 無論你是技術小白還是資深大牛&#xff0c;這里總有一些內容能觸動你的好奇心。&#x1f50d; &#x…

電子電器架構 --- 網關釋放buffer的必要性

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…

Java中Stream、File、方法遞歸

文章目錄 十五、Stream流、File、方法遞歸1、Stream1.1 什么是Stream1.2 獲取Stream流1.3 Stream流常見的中間方法1.3 Stream流常見的終結方法1.4 收集Stream流 2、File、IO流&#xff08;一&#xff09;2.1 存儲數據的方案2.2 File&#xff1a;代表文本2.3 常用方法一&#xf…

挑戰用豆包教我學Java01天

今天是豆包教我學Java的第一天&#xff0c;廢話不多說直接開始。 1.每日題目&#xff1a; 基礎語法與數據類型 題目&#xff1a;編寫一個 Java 程序&#xff0c;從控制臺讀取兩個整數&#xff0c;然后計算它們的和、差、積、商&#xff0c;并輸出結果。題目&#xff1a;編寫…

文章記單詞 | 第67篇(六級)

一&#xff0c;單詞釋義 cylinder&#xff1a;英 [?s?l?nd?(r)] 美 [?s?l?nd?r] &#xff0c;名詞&#xff0c;意為 “圓筒&#xff1b;圓柱體&#xff1b;汽缸&#xff1b;&#xff08;有特定用途的&#xff09;圓筒形物品”。fool&#xff1a;英 [fu?l] 美 [fu?l]…

Make:獨立創造者手冊——從0到1的商業自由之路

目錄 如何獲得創業想法 ? 解決你自己的問題 ? 從微觀細分市場起步 ? 從問題出發&#xff0c;而非解決方案 ? 記錄與驗證想法 如何構建產品 ? 快速構建最小化產品 ? 對抗完美主義 ? 自行開發 vs. 外包 ? 學習基礎編程的必要性 案例與洞見 ? Levelsio的70個項目與5%成…

spark基本介紹

一、Spark概述 Spark是一種基于內存的快速、通用、可拓展的大數據分析計算引擎。 Hadoop是一個分布式系統結構的基礎架構。 二、Spark與Hadoop相比較的優勢&#xff1a; 1. 處理速度&#xff1a;Hadoop&#xff1a;數據處理速度相對較慢 Spark&#xff1a;速度比Hadoop快很…

Pdf轉Word案例(java)

Pdf轉Word案例&#xff08;java&#xff09; 需要導入aspose-pdf.jar 需要先手動下載jar包到本地&#xff0c;然后通過systemPath在pom文件中引入。 下載地址&#xff1a;https://releases.aspose.com/java/repo/com/aspose/aspose-pdf/25.4/ <dependency><groupId&…

探索 C++ 語言標準演進:從 C++23 到 C++26 的飛躍

引言 C 作為一門歷史悠久且廣泛應用的編程語言&#xff0c;其每一次標準的演進都備受開發者關注。從早期的 C98 到如今的 C23&#xff0c;再到令人期待的 C26&#xff0c;每一個版本都為開發者帶來了新的特性和改進&#xff0c;推動著軟件開發的不斷進步。本文將深入探討 C23 …

如何有效防御服務器DDoS攻擊

分布式拒絕服務&#xff08;DDoS&#xff09;攻擊通過大量惡意流量淹沒服務器資源&#xff0c;導致服務癱瘓。本文將提供一套結合代碼實現的主動防御方案&#xff0c;涵蓋流量監控、自動化攔截和基礎設施優化。 1. 實時流量監控與告警 目標&#xff1a;檢測異常流量并觸發告警…

【Bootstrap V4系列】學習入門教程之 組件-折疊(Collapse)

Bootstrap V4系列 學習入門教程之 組件-折疊&#xff08;Collapse&#xff09; 折疊&#xff08;Collapse&#xff09;How it works一、Example二、Horizontal 水平的三、Multiple targets 多個目標四、Accordion example 手風琴示例 折疊&#xff08;Collapse&#xff09; 通…

C24-數組

數組的引入:方便對同一類型的數據進行管理(一個班級里的45個同學、一個籃子里的12個蘋果)數組的定義: 數據類型 數組名[常量表達式(也就是元素的個數)];int a[10]; //這里定義了一個能存放10個元素的整形數組數組初始化 完全初始化 int arr[3]{5,6,8};部分初始化 int arr[10]{…

手持小風扇方案解說---【其利天下技術】

春去夏來&#xff0c;酷暑時節&#xff0c;小風扇成為外出必備的解暑工具&#xff0c;近年來&#xff0c;隨著無刷電機的成本急劇下降&#xff0c;小風扇也逐步從有刷變無刷化了。 數量最大的如一箱無刷馬達&#xff0c;其次三相低壓無刷電機也大量被一些中高端風扇大量采用。…