国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)----完全二叉樹的時間復(fù)雜度講解,堆排序

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)----完全二叉樹的時間復(fù)雜度講解,堆排序。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一.建堆的時間復(fù)雜度

1.向上調(diào)整算法建堆

2.向下調(diào)整算法建堆

二.堆排序

1.概念

2.代碼思路

3.代碼實現(xiàn)


一.建堆的時間復(fù)雜度

1.向上調(diào)整算法建堆

我們就以極端情況考慮時間復(fù)雜度(滿二叉樹+遍歷所有層)

數(shù)據(jù)結(jié)構(gòu)----完全二叉樹的時間復(fù)雜度講解,堆排序,數(shù)據(jù)結(jié)構(gòu),算法

假設(shè)所有節(jié)點個數(shù)為N,樹的高度為h

N = 2^0+2^1+2^2......+2^(h-1)

即N = 2^h - 1

h = log(N+1)

時間復(fù)雜度我們以交換次數(shù)為標(biāo)準(zhǔn)

1? ? ? ? 0

2? ? ? ? 2^0*2^1

3? ? ? ? 2^1*2^2

...

h? ? ? ?2^(h-2)*2^(h-1)

F(h) =?2^0*2^1+2^1*2^2+...+2^(h-2)*2^(h-1)

? ? ? ?= 2^h*(h-2)+2

F(N) = (N+1)(log(N+1)-2)+2(這是詳細的時間復(fù)雜度函數(shù),粗略記為O(N*logN))

2.向下調(diào)整算法建堆

數(shù)據(jù)結(jié)構(gòu)----完全二叉樹的時間復(fù)雜度講解,堆排序,數(shù)據(jù)結(jié)構(gòu),算法

1? ? ? ? (h-1)

2? ? ? ? 2^1*(h-2)

3? ? ? ? 2^2*(h-3)

...

h-1? ? 2^(h-2)*1

h? ? ? ?2^(h-1)*0

找到倒數(shù)第一個非葉節(jié)點開始向下調(diào)整

F(h) = 2^h-1-(h-1)

F(N) = N-log(N+1)(粗略記為O(N))

二.堆排序

1.概念

堆排序(Heap Sort)是一種高效的排序算法,它利用了“二叉堆”這種數(shù)據(jù)結(jié)構(gòu)來進行排序。
?
堆是一種特殊的樹狀結(jié)構(gòu),分為最大堆和最小堆。在最大堆中,每個父節(jié)點的值都大于或等于其子節(jié)點的值;而在最小堆中,每個父節(jié)點的值都小于或等于其子節(jié)點的值。
?
堆排序的基本思想是:將待排序的序列構(gòu)建成一個最大堆,然后將最大值(即堆的根節(jié)點)與序列的最后一個元素交換位置,并將剩余元素重新構(gòu)建為一個最大堆。重復(fù)這個過程,直到整個序列有序。
?
堆排序的時間復(fù)雜度為 O(n \log n),空間復(fù)雜度為 O(1)。它是一種不穩(wěn)定的排序算法,適用于排序整數(shù)、浮點數(shù)或其他可比較的數(shù)據(jù)類型。
?
堆排序的優(yōu)點包括:
?
1.?時間復(fù)雜度較低:堆排序的時間復(fù)雜度為 O(n \log n),在平均情況下比其他一些排序算法(如冒泡排序、插入排序)快得多。
2.?空間復(fù)雜度低:堆排序的空間復(fù)雜度為 O(1),它不需要額外的存儲空間來保存排序后的結(jié)果,只使用了固定的輔助空間。
3.?適用于大型數(shù)據(jù)集:堆排序可以有效地處理大型數(shù)據(jù)集,因為它的時間復(fù)雜度和空間復(fù)雜度都比較低。
?
堆排序的缺點包括:
?
1.?不穩(wěn)定:堆排序是一種不穩(wěn)定的排序算法,這意味著在排序過程中可能會改變相同值元素的相對順序。
2.?難以理解和實現(xiàn):堆排序的概念和操作相對復(fù)雜,對于初學(xué)者來說可能比較難以理解和實現(xiàn)。
?
總的來說,堆排序是一種高效的排序算法,但在選擇排序算法時需要根據(jù)具體情況考慮其優(yōu)缺點。如果對排序的穩(wěn)定性要求較高,則可能需要選擇其他排序算法。

堆排序的平均性能為O(nlogn)。它的時間復(fù)雜度和空間復(fù)雜度都比較低,適用于排序整數(shù)、浮點數(shù)或其他可比較的數(shù)據(jù)類型。
?
在最壞情況下,堆排序的時間復(fù)雜度為O(nlog2n)。因此,堆排序的平均性能較接近于最壞性能。

2.代碼思路

這里我們采用向下調(diào)整法

比如這里有一個大堆,要把它排成升序數(shù)組

?7 4 5 1 4 3

? ? ? ? ? ? ? ? s

首尾交換,把大數(shù)據(jù)放后面

?3?4 5 1 4 7

? ? ? ? ? ? ?s

讓后向下調(diào)整,把下一個大數(shù)據(jù)調(diào)到堆頂

5 4 3?1 4 7

? ? ? ? ? ? ?s

首尾交換,把大數(shù)據(jù)放后面

4 4 3?1 5?7

? ? ? ? ?s

1 4 3 4?5?7

? ? ? s

4 1?3 4?5?7

? ? ? s

3 1 4?4?5?7

? ?s

1 3?4?4?5?7

s文章來源地址http://www.zghlxwxcb.cn/news/detail-839613.html

3.代碼實現(xiàn)

void adjustDown(HeapDataType* p, int size, int parent)
{
	int child = parent * 2 + 1;
	if (p[child] < p[child + 1])
		child++;
	while (child <= size)
	{
		if (child + 1 <= size && p[parent] < p[child])
		{
			Swap(&p[parent], &p[child]);
			parent = child;
			child = child * 2 + 1;
			if (p[child] < p[child + 1])
				child++;
		}
		else break;
	}
}
void heapSort(HeapDataType* p, int size)
{
	//建堆,一般采用向下調(diào)整法
	//向下調(diào)整法建堆的時間復(fù)雜度為O(N)
	//向上調(diào)整法時間復(fù)雜度為O(N*logN)
	for (int i = (size - 1 - 1) / 2; i >= 0; i--)
		adjustDown(p, size, i);
	//堆排序,升序用大堆,降序用小堆
	while (size > 0)
	{
		Swap(&p[0], &p[size - 1]);
		size--;
		adjustDown(p, size, 0);
	}
}

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)----完全二叉樹的時間復(fù)雜度講解,堆排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的順序結(jié)構(gòu)實現(xiàn)及時間復(fù)雜度計算(二)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的順序結(jié)構(gòu)實現(xiàn)及時間復(fù)雜度計算(二)

    目錄 一,二叉樹的順序結(jié)構(gòu)實現(xiàn) ????????1,二叉樹的順序結(jié)構(gòu) ????????2,堆的概念及結(jié)構(gòu) ????????3,堆的接口實現(xiàn) 1,堆的創(chuàng)建 2,接口函數(shù) 3,初始化 4,銷毀 5,是否增容 6,交換數(shù)據(jù) 7,堆向上調(diào)整算法 8,插入數(shù)據(jù) 9,刪除數(shù)據(jù) 10,堆向下調(diào)整算法 11,打印數(shù)

    2024年02月09日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的節(jié)點數(shù),葉子數(shù),第K層節(jié)點數(shù),高度,查找x節(jié)點,判斷是否為完全二叉樹等方法

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的節(jié)點數(shù),葉子數(shù),第K層節(jié)點數(shù),高度,查找x節(jié)點,判斷是否為完全二叉樹等方法

    ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ?? ?? 個人主頁 :阿然成長日記 ??點擊可跳轉(zhuǎn) ?? 個人專欄: ??數(shù)據(jù)結(jié)構(gòu)與算法??C語言進階 ?? 不能則學(xué),不知則問,恥于問人,決無長進 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 每一個節(jié)點有 1.數(shù)據(jù)

    2024年02月07日
    瀏覽(34)
  • 【數(shù)據(jù)結(jié)構(gòu)】樹、二叉樹的概念和二叉樹的順序結(jié)構(gòu)及實現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】樹、二叉樹的概念和二叉樹的順序結(jié)構(gòu)及實現(xiàn)

    之前我們學(xué)習(xí)了順序表、鏈表以及棧和隊列這些數(shù)據(jù)結(jié)構(gòu),但這些數(shù)據(jù)結(jié)構(gòu)都是線性的(一對一)。接下來要學(xué)習(xí) 非線性的數(shù)據(jù)結(jié)構(gòu)——樹(二叉樹) ,相比前面的,樹的結(jié)構(gòu)更加復(fù)雜,話不多說,直接進入正題吧。 樹是一種 非線性的數(shù)據(jù)結(jié)構(gòu) ,它是 一對多(也有可能是

    2024年02月07日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)——二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    數(shù)據(jù)結(jié)構(gòu)——二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    ? 個人主頁 : 日刷百題 系列專欄 : 〖C語言小游戲〗〖Linux〗〖數(shù)據(jù)結(jié)構(gòu)〗 ?〖C語言〗 ?? 歡迎各位 → 點贊 ??+ 收藏 ??+ 留言 ??? ? 這里我們使用先序遍歷的思想來創(chuàng)建二叉樹,這里的內(nèi)容對于剛接觸二叉樹的朋友可能有些難理解,不妨先看完下面的二叉樹各種遍歷

    2024年02月05日
    瀏覽(31)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    學(xué)習(xí)鏈?zhǔn)蕉鏄湟廊N遍歷方式,便于對二叉樹的節(jié)點以及左子樹和右子樹進行操作。 前序遍歷:根、左子樹、右子樹 中序遍歷:左子樹、根、右子樹 后序遍歷:左子樹、右子樹、根 以下圖為例: 得到的結(jié)果: 前序遍歷:1 2 3 4 5 6 中序遍歷:3 2 1 5 4 6 后序遍歷:3 2

    2024年02月08日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu):二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    數(shù)據(jù)結(jié)構(gòu):二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    朋友們、伙計們,我們又見面了,本期來給大家解讀一下鏈?zhǔn)蕉鏄涞南嚓P(guān)知識點,如果看完之后對你有一定的啟發(fā),那么請留下你的三連,祝大家心想事成! 數(shù)據(jù)結(jié)構(gòu)與算法專欄 :數(shù)據(jù)結(jié)構(gòu)與算法 個? 人? 主? 頁 :stackY、 C 語 言 專 欄 :C語言:從入門到精通 目錄 前言

    2024年02月07日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的介紹和二叉樹堆

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的介紹和二叉樹堆

    ??作者簡介: 加油,旭杏,目前大二,正在學(xué)習(xí) C++ , 數(shù)據(jù)結(jié)構(gòu) 等?? ??作者主頁:加油,旭杏的主頁?? ?本文收錄在:再識C進階的專欄?? ??代碼倉庫:旭日東升 1?? ??歡迎大家點贊 ?? 收藏 ? 加關(guān)注哦!?? ???????樹這一概念,在我們剛開始聽說的時候會覺得

    2024年01月20日
    瀏覽(34)
  • 數(shù)據(jù)結(jié)構(gòu):二叉樹的順序結(jié)構(gòu)--堆

    數(shù)據(jù)結(jié)構(gòu):二叉樹的順序結(jié)構(gòu)--堆

    朋友們、伙計們,我們又見面了,本期來給大家解讀一下二叉樹--堆的相關(guān)知識點,如果看完之后對你有一定的啟發(fā),那么請留下你的三連,祝大家心想事成! C 語 言 專 欄:C語言:從入門到精通 數(shù)據(jù)結(jié)構(gòu)專欄:數(shù)據(jù)結(jié)構(gòu) 個? 人? 主? 頁 :stackY、 目錄 前言: 1.堆的概念及

    2024年02月06日
    瀏覽(28)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的順序結(jié)構(gòu)-堆

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的順序結(jié)構(gòu)-堆

    普通的二叉樹是不適合用數(shù)組來存儲的,因為可能會存在大量的空間浪費。而 完全二叉樹 更適合使用順序結(jié)構(gòu)存儲。 現(xiàn)實中我們通常把堆(一種二叉樹)使用順序結(jié)構(gòu)的數(shù)組來存儲,需要注意的是這里的堆和操作系統(tǒng)虛擬進程地址空間中的堆是兩回事,一個是數(shù)據(jù)結(jié)構(gòu),一個

    2024年02月09日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)—二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)實現(xiàn)】

    【數(shù)據(jù)結(jié)構(gòu)—二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)實現(xiàn)】

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言 一、二叉樹的存儲結(jié)構(gòu) 二、二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的實現(xiàn) 2.1手動構(gòu)建一課樹 2.2二叉樹的遍歷 三、二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的實現(xiàn) 3.1前序遍歷(遞歸) 3.2中序遍歷(遞歸) 3.3后序遍歷(遞歸) 3.4層序遍歷(非遞

    2024年02月03日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包