堆排序(Heap Sort)

堆排序是一種高效的排序算法,它利用了堆的數據結構來實現。堆是一種特殊的完全二叉樹,分為最大堆和最小堆兩種類型。在最大堆中,父節點的值大于等于其子節點的值;而在最小堆中,父節點的值小于等于其子節點的值。

堆排序的基本思想是:

  1. 將待排序的序列構造成一個大頂堆(或小頂堆)。
  2. 此時,整個序列的最大值(或最小值)就是堆頂的根節點。
  3. 將堆頂元素與末尾元素進行交換,使末尾元素最大(或最小)。
  4. 然后對剩余的 n-1 個元素重新構造堆,得到 n-1 個元素的最大(或最小)值。
  5. 如此反復執行,直到整個序列有序。

代碼實現:

public class HeapSort {public void heapSort(int[] arr) {int n = arr.length;for (int i = n / 2 - 1; i >= 0; i--){heapify(arr, n, i);}for (int i = n - 1; i > 0; i--) {int temp = arr[0];arr[0] = arr[i];arr[i] = temp;heapify(arr, i, 0);}}void heapify(int[] arr, int n, int i) {int largest = i; int l = 2 * i + 1; // left = 2*i + 1int r = 2 * i + 2; // right = 2*i + 2if (l < n && arr[l] > arr[largest])largest = l;if (r < n && arr[r] > arr[largest])largest = r;if (largest != i) {int swap = arr[i];arr[i] = arr[largest];arr[largest] = swap;heapify(arr, n, largest);}}public void printArray(int[] arr) {int n = arr.length;for (int i = 0; i < n; ++i)System.out.print(arr[i] + " ");}public static void main(String[] args) {int[] arr = {12, 11, 13, 5, 6, 7};int n = arr.length;HeapSort heapSort = new HeapSort();heapSort.heapSort(arr);heapSort.printArray(arr);}
}

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

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

相關文章

【C命名規范】遵循良好的命名規范,提高代碼的可讀性、可維護性和可復用性

/******************************************************************** * brief param return author date version是代碼書寫的一種規范 * brief &#xff1a;簡介&#xff0c;簡單介紹函數作用 * param &#xff1a;介紹函數參數 * return&#xff1a;函數返回類型說明 * …

同一個excel表格,為什么在有的電腦上會顯示#NAME?

一、哪些情況會產生#NAME?的報錯 1.公式名稱拼寫錯誤 比如求和函數SUM&#xff0c;如果寫成SUN就會提示#NAME&#xff1f;報錯。 2.公式中的文本值未添加雙引號 如下圖&#xff1a; VLOOKUP(丙,A:B,2,0) 公式的計算結果會返回錯誤值#NAME?&#xff0c;這是因為公式中文本…

【PLC】三菱PLC如何和匯川伺服實現485通信

前言 一開始選用的是匯川SV660P脈沖型伺服&#xff0c;由于生產需求需要對伺服的個別參數進行讀取和寫入操作&#xff0c;但是SV660P并不支持這種情況&#xff0c;因此需要使用485通信來滿足。PLC這邊選用的是三菱FX5U。 開始 1、首先準備按照下圖的引腳提示準備好一根帶屏蔽…

全志H616交叉編譯工具鏈的安裝與使用

交叉編譯的概念 1. 什么是交叉編譯&#xff1f; 交叉編譯是指在一個平臺上生成可以在另一個平臺上運行的可執行代碼。例如&#xff0c;在Ubuntu Linux上編寫代碼&#xff0c;并編譯生成可在Orange Pi Zero2上運行的可執行文件。這個過程是通過使用一個專門的交叉編譯工具鏈來…

(七)glDrawArry繪制

幾何數據&#xff1a;vao和vbo 材質程序&#xff1a;vs和fs(頂點著色器和片元著色器) 接下來只需要告訴GPU&#xff0c;使用幾何數據和材質程序來進行繪制。 #include <glad/glad.h>//glad必須在glfw頭文件之前包含 #include <GLFW/glfw3.h> #include <iostrea…

程序員接單服務話術

進入群聊開始服務時&#xff1a; 尊敬的客戶您好&#xff0c;我程序員&#xff1a;xx 很榮幸為您服務 我擅長xx領域 接下來我們一起對接下詳細需求&#xff0c;我將根據您的任務需求難度給您匯報開發所需時長及報價。預祝我們合作愉快。 報價后且客戶接受時&#xff1a; 您好…

PostgreSQL的學習心得和知識總結(一百四十七)|深入理解PostgreSQL數據庫之transaction chain的使用和實現

目錄結構 注&#xff1a;提前言明 本文借鑒了以下博主、書籍或網站的內容&#xff0c;其列表如下&#xff1a; 1、參考書籍&#xff1a;《PostgreSQL數據庫內核分析》 2、參考書籍&#xff1a;《數據庫事務處理的藝術&#xff1a;事務管理與并發控制》 3、PostgreSQL數據庫倉庫…

2024年文化傳播與對外交流國際學術會議(ICCCFE 2024)

2024年文化傳播與對外交流國際學術會議&#xff08;ICCCFE 2024&#xff09; 2024 International Conference on Cultural Communication and Foreign Exchange(ICCCFE 2024) 會議簡介&#xff1a; 2024年文化傳播與對外交流國際學術會議&#xff08;ICCCFE 2024&#xff09;定…

clion開發51 沒有創建成功可能是Clion版本問題

安裝插件 PlatformlO for CLion 進入這個網站下載get-platformio.py https://docs.platformio.org/en/latest/core/installation/methods/installer-script.html#local-download-macos-linux-windows 點擊 Installation Methods 選擇 Local Download (macOS/Linux/Windows) 點…

linux指令gzip

gzip 是 Linux 系統中廣泛使用的一個文件壓縮和解壓縮程序。它使用 Lempel-Ziv 編碼&#xff08;LZ77&#xff09;和 Huffman 編碼的組合來壓縮文件&#xff0c;減少磁盤使用空間和網絡傳輸時間。以下是對 gzip 命令的一些基本使用說明和示例&#xff0c;這些示例旨在幫助你了解…

小阿軒yx-案例:MySQL主從復制與讀寫分離

小阿軒yx-案例&#xff1a;MySQL主從復制與讀寫分離 案例分析 概述 實際生產環境中 如果對數據庫讀和寫都在同一個數據庫服務器中操作&#xff0c;無論在安全性、高可用性還是高并發等各個方面都完全不能滿足實際需求一般都是通過主從復制&#xff08;Master-Slave&#xf…

MSPG3507——藍牙接收數據顯示在OLED,滴答定時器延時500MS

#include "ti_msp_dl_config.h" #include "OLED.h" #include "stdio.h"volatile unsigned int delay_times 0;//搭配滴答定時器實現的精確ms延時 void delay_ms(unsigned int ms) {delay_times ms;while( delay_times ! 0 ); } int a0; …

4.自動生成class和device

第三章里面&#xff0c;我們使用mknod創建設備節點&#xff0c;常規操作是在驅動init的時候就創建好&#xff0c;使用class_create和device_create創建。 #include "asm/uaccess.h" #include "linux/scatterlist.h" #include "linux/types.h" #…

【公平鎖 和 非公平鎖】

公平鎖 和 非公平鎖 公平鎖:類似食堂打飯&#xff0c;按照申請鎖的順序來獲取鎖類似廁所蹲坑先來后到 公平鎖就是很公平 在并發環境下每個線程在獲取鎖的同時會先查看此鎖維護的等待隊列&#xff0c;如果為空&#xff0c;或者當前線程是等待就占有鎖&#xff0c;否則就加入到…

20人團隊如何免費使用 Atlassian 云產品?

企業賺錢越來越難&#xff0c;尤其是初創團隊或小型團隊更傾向于使用免費工具支持業務。團隊規模影響協作復雜度&#xff0c;Atlassian 考慮到小團隊的需求&#xff0c;提供了多種選擇。比如&#xff0c;Jira 和 Confluence 的云版本有免費版&#xff0c;包含基本的項目管理功能…

ISP IC/FPGA設計-第一部分-SC130GS攝像頭分析(0)

1.介紹 SC130GS是一款國產的Global shutter CMOS圖像傳感器&#xff0c;最高支持1280Hx1024V240fps的傳輸速率&#xff1b;SC130GS有黑白和彩色款&#xff0c;作為ISP開發選擇彩色的&#xff0c;有效像素窗口為1288Hx1032V&#xff0c;支持復雜的片上操作&#xff0c;選擇他理…

Toshiba東芝TB6612FNG電機驅動IC:釋放性能與多功能性

在嵌入式系統和機器人技術領域&#xff0c;電機控制是一個關鍵方面&#xff0c;對項目的性能和可靠性有著顯著影響。東芝的TB6612FNG電機驅動IC作為一個穩健且多功能的解決方案&#xff0c;在驅動雙直流電機方面脫穎而出&#xff0c;提供了高性能、可靠性和易用性。本文將深入探…

23種設計模式之裝飾者模式

深入理解裝飾者模式 一、裝飾者模式簡介1.1 定義1.2 模式類型1.3 主要作用1.4 優點1.5 缺點 二、模式動機三、模式結構四、 裝飾者模式的實現4.1 組件接口4.2 具體組件4.3 裝飾者抽象類4.4 具體裝飾者4.5 使用裝飾者模式4.6 輸出結果&#xff1a; 五、 應用場景5.1 圖形用戶界面…

排序(堆排序、快速排序、歸并排序)-->深度剖析(二)

前言 前面介紹了冒泡排序、選擇排序、插入排序、希爾排序&#xff0c;作為排序中經常用到了算法&#xff0c;還有堆排序、快速排序、歸并排序 堆排序&#xff08;HeaSort&#xff09; 堆排序的概念 堆排序是一種有效的排序算法&#xff0c;它利用了完全二叉樹的特性。在C語言…