最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++實現(xiàn)堆排序的示例代碼

 更新時間:2023年02月02日 09:05:49   作者:吳天德少俠  
本文主要介紹了c++實現(xiàn)堆排序的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

看了一下優(yōu)先隊列,查了一下堆排序。堆排序主要就是建最大堆(最小堆)和交換2個操作。如果建的是最大堆,那么交換的時候,父節(jié)點就和最大的子節(jié)點比較,如果它比最大的子節(jié)點還大,那就不用比了。因為后面還有一個交換的操作,所以最后得到的就是由小到大的排序;反之,得到的就是由大到小的排序。

#include<iostream>
#include<algorithm>
using namespace std;

void maxHeapify(int arr[], int start, int end)
{
	int dad = start;
	int son = dad * 2 + 1;
	while (son <= end) {
		if (son + 1 <= end && arr[son] < arr[son + 1]) {
			son++;// 找出最大的兒子
		}
		// 父節(jié)點跟最大的子節(jié)點比較即可
		if (arr[dad] > arr[son]) {
			return;
		}
		else {
			// 交換父節(jié)點與子節(jié)點
			swap<int>(arr[dad], arr[son]);
			// 這個時候父節(jié)點位置滿足要求了,下面的子節(jié)點不一定滿足要求
			// 還需要檢查有沒有導(dǎo)致下面的子節(jié)點受到影響
			dad = son;
			son = dad * 2 + 1;
		}
	}
}

void heapSort(int arr[], int len)
{
	// 初始化,從最后一個父節(jié)點開始,調(diào)整所有的父節(jié)點
	for (int i = len / 2 - 1; i >= 0; i--) {
		maxHeapify(arr, i, len - 1);
	}
	// 這個時候找到了最大元素(堆頂),
	// 將其和最后一個元素交換。(這樣就會得到由小到大的排序)	
	for (int i = len - 1; i > 0; i--) {
		swap(arr[0], arr[i]);
		// 將交換之后除了最后一個元素的所有元素,重新調(diào)整為最大堆
		maxHeapify(arr, 0, i - 1);
	}
}

int main()
{
	int arr[]{ 5,3,4,9,7,8,1,2,10,23,15 };
	int len = int(sizeof(arr) / sizeof(*arr));
	heapSort(arr, len);
	cout << "排序之后:" << endl;
	for (auto item : arr) {
		cout << item << " ";
	}

	return 0;
}

在這里插入圖片描述

這幾行代碼干的事情,就是如下圖所示,由低向高,逐漸生成最大堆,找到最大元素

在這里插入圖片描述

緊接著的后面的for循環(huán)就是最后一個元素和堆頂元素交換,然后重新調(diào)整除了交換到后面來的元素,直到只有堆頂一個元素。就排好序了。

在這里插入圖片描述

到此這篇關(guān)于c++實現(xiàn)堆排序的示例代碼的文章就介紹到這了,更多相關(guān)c++ 堆排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt添加MSVC2017編譯器的實現(xiàn)方法

    Qt添加MSVC2017編譯器的實現(xiàn)方法

    Qt添加MSVC2017編譯器是開發(fā)者在Windows平臺上進(jìn)行Qt應(yīng)用程序開發(fā)的重要步驟,本文詳細(xì)介紹了如何為Qt配置MSVC2017編譯器的具體步驟,感興趣的可以了解一下
    2023-09-09
  • QT實現(xiàn)定時關(guān)閉消息提示框

    QT實現(xiàn)定時關(guān)閉消息提示框

    這篇文章主要介紹了軟件利用Qt簡單實現(xiàn)消息提示框可定時自動關(guān)閉,文中的示例代碼講解詳細(xì),對我們;了解QT有一定的幫助,感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • CMake 生成靜態(tài)庫與動態(tài)庫的方法步驟

    CMake 生成靜態(tài)庫與動態(tài)庫的方法步驟

    本文主要介紹了CMake 生成靜態(tài)庫與動態(tài)庫的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • C++中的struct和class的區(qū)別詳解

    C++中的struct和class的區(qū)別詳解

    這篇文章主要介紹了C++中的struct和class的區(qū)別詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • C++之如何設(shè)置字體顏色

    C++之如何設(shè)置字體顏色

    很多C++的初學(xué)者發(fā)現(xiàn),控制臺的顏色永遠(yuǎn)是黑白的,這未免太單調(diào)了,怎么才能使字體像那些軟件一樣呈彩色呢?現(xiàn)在,我們就將學(xué)習(xí)C++ 設(shè)置字體顏色的方法
    2023-08-08
  • Linux C 獲取進(jìn)程退出值的實現(xiàn)代碼

    Linux C 獲取進(jìn)程退出值的實現(xiàn)代碼

    本篇文章是對在Linux下使用c語言獲取進(jìn)程退出值的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中delete和delete[]的區(qū)別

    C++中delete和delete[]的區(qū)別

    這篇文章主要介紹了C++中delete和delete[]的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • C++學(xué)習(xí)之線程詳解

    C++學(xué)習(xí)之線程詳解

    多線程是開發(fā)中必不可少的,往往我們需要多個任務(wù)并行,就需要多線程開發(fā)。本文將帶大家深入學(xué)習(xí)一下C++中的常用的一些知識點,感興趣的同學(xué)可以了解一下
    2021-12-12
  • Qt實現(xiàn)網(wǎng)絡(luò)聊天室的示例代碼

    Qt實現(xiàn)網(wǎng)絡(luò)聊天室的示例代碼

    本文主要介紹了Qt實現(xiàn)網(wǎng)絡(luò)聊天室,實現(xiàn)一個在線聊天室, 使用tcp對客戶端和服務(wù)器端進(jìn)行通訊。具有一定的參考價值,具有一定的參考價值,
    2021-06-06
  • C語言:代碼宏詳解

    C語言:代碼宏詳解

    這篇文章主要介紹了 C語言宏定義使用實例詳解的相關(guān)資料,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09

最新評論

清远市| 大渡口区| 黄冈市| 咸宁市| 涡阳县| 思南县| 余姚市| 丘北县| 克东县| 宁明县| 江陵县| 黑水县| 和顺县| 珠海市| 沅江市| 丹巴县| 大方县| 麻栗坡县| 张家港市| 海丰县| 罗田县| 崇阳县| 扶绥县| 嘉禾县| 平和县| 河源市| 德兴市| 新蔡县| 仪征市| 缙云县| 富阳市| 怀仁县| 临潭县| 古蔺县| 卫辉市| 克什克腾旗| 宜阳县| 广东省| 长丰县| 牟定县| 怀远县|