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

【一圖看懂選擇排序】——選擇排序和堆排序

這篇具有很好參考價(jià)值的文章主要介紹了【一圖看懂選擇排序】——選擇排序和堆排序。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前文知識(shí)清單:
【一圖看懂選擇排序】——選擇排序和堆排序

一、選擇排序

直接選擇排序通過(guò)每一輪的比較,找到最大值和最小值,將最大值的節(jié)點(diǎn)跟右邊交換,最小值節(jié)點(diǎn)跟左邊交換,達(dá)到排升序的效果。

一圖看懂直接選擇排序:
【一圖看懂選擇排序】——選擇排序和堆排序

void SelectSort(ShellDataType* a, int n)
{
	//左下標(biāo) 和右下標(biāo)
	int left = 0;
	int right = n - 1;
	
	//不需要left <= right,最后一個(gè)元素不需要再交換,當(dāng)然給<=也沒(méi)問(wèn)題
	while (left < right)
	{
		//假設(shè)最小最大全部在left
		int mini = left, maxi = left;
		//單趟查找最小值和最大值下標(biāo)
		for (int i = left; i < right; i++)
		{
			//找到最小的,更新下標(biāo)
			if (a[i] < a[mini])
			{
				mini = i;
			}
			//找到最大的,更新下標(biāo)
			if (a[i] > a[maxi])
			{
				maxi = i;
			}
		}
		//maxi和right交換,mini和left交換

		Swap(&a[left], &a[mini]);
		//這里存在特殊情況,如果maxi在left位置,left和mini交換了之后,最大值的下標(biāo)就是mini了
		//所以這里需要判斷一下,如果真的是這種情況,就更新最大值下標(biāo)。
		if (maxi == left)
		{
			maxi = mini;
		}
		Swap(&a[right], &a[maxi]);
		//后面的不需要再更新了,因?yàn)楹竺婢退鉳ini是在right位置,這輪也已經(jīng)結(jié)束了,所以不需要再管它

		//更新left和right 的下標(biāo)
		left++;
		right--;
	}

}

直接選擇排序時(shí)間復(fù)雜度

每一輪比較都需要遍歷數(shù)組,查找最大最小值,第一輪遍歷N個(gè)數(shù)據(jù),第二輪是N-2個(gè)數(shù)據(jù),第三輪N-4 …,遍歷次數(shù)為:N+N-2+N-4+…+1,一個(gè)等差數(shù)列求和

所以總的時(shí)間復(fù)雜度為O(N^2)

二、堆排序

向上調(diào)整算法和向下調(diào)整算法請(qǐng)參照:數(shù)據(jù)結(jié)構(gòu)——堆

所謂堆排序,就是排序堆,要求是堆才能夠進(jìn)行排序,所以給任意一個(gè)連續(xù)數(shù)組對(duì)數(shù)組排序的話(huà),需要先建堆。

使用向上調(diào)整法建堆如下圖:

【一圖看懂選擇排序】——選擇排序和堆排序
結(jié)果如下:
【一圖看懂選擇排序】——選擇排序和堆排序

時(shí)間復(fù)雜度為O(N*logN)


使用向下調(diào)整建堆如下圖:

【一圖看懂選擇排序】——選擇排序和堆排序
時(shí)間復(fù)雜度O(N)

堆排序:

堆排序使用交換之后再向下調(diào)整原理:
在建了大根堆之后,堆頂?shù)淖笥易訕?shù)都是大根堆,不管最后一個(gè)元素是否是最小的,與堆頂元素交換后,
堆頂元素就被放到了堆尾,然后再讓堆頂元素向下調(diào)整,因?yàn)榇藭r(shí)堆頂元素是一個(gè)較小的元素,會(huì)向下調(diào)整,調(diào)整之后是第二大的元素在堆頂下一次再排序時(shí),排的是堆尾的前一個(gè)了,那個(gè)最大的元素不用再排了,排的就是第二大的元素,
再讓堆的最后一個(gè)元素與堆頂元素交換,再進(jìn)行向下調(diào)整,調(diào)整完后第三大的元素就上來(lái)了。

建好堆后,對(duì)堆進(jìn)行排序,堆排序過(guò)程圖如下:

【一圖看懂選擇排序】——選擇排序和堆排序

堆排序代碼如下:

void HeapSort(int* a, int n)
{
	
	assert(a);

	//1.先建堆,向上調(diào)整建堆,建堆的時(shí)間復(fù)雜度為O(N*logN)
	
	//也可以采用向下調(diào)整的方法建堆,向下調(diào)整的方法建堆的時(shí)間復(fù)雜度為O(N)
	//強(qiáng)烈建議采用向下調(diào)整的建堆方式
	//for (int i = 0; i < n; ++i)
	//{
	//	AdjustUp(a, i);
	//}
	//向下調(diào)整建堆,是從第一個(gè)非葉子節(jié)點(diǎn)開(kāi)始調(diào)整,因?yàn)樗械娜~子節(jié)點(diǎn)都不需要進(jìn)行向下調(diào)整
	//child = (parent-1)/2
	//此時(shí)parent就是n-1
	for (int i = (n - 1 - 1) / 2; i >=0; -- i)
	{
		AdjustDown(a, n, i);
	}
	//現(xiàn)在是大根堆
	
	//2.堆排序,采用向下調(diào)整算法進(jìn)行排序,讓最后一個(gè)節(jié)點(diǎn)和堆頂節(jié)點(diǎn)進(jìn)行交換,然后堆頂節(jié)點(diǎn)向下調(diào)整
	//調(diào)整完后繼續(xù)倒數(shù)第二個(gè)節(jié)點(diǎn)和堆頂節(jié)點(diǎn)交換,以此類(lèi)推

	for (int i = n-1; i >0; --i)
	{
		swap(&a[0], &a[i]);
		//這里傳參不能傳n,傳n-1,因?yàn)榻粨Q之后最后一個(gè)數(shù)字就不需要參與進(jìn)來(lái)了,相當(dāng)于size--
		//堆排序使用交換之后再向下調(diào)整原理:
		//在建了大根堆之后,堆頂?shù)淖笥易訕?shù)都是大根堆,不管最后一個(gè)元素是否是最小的,與堆頂元素交換后
		//堆頂元素就被放到了堆尾,然后再讓堆頂元素向下調(diào)整,因?yàn)榇藭r(shí)堆頂元素是一個(gè)較小的元素,會(huì)向下調(diào)整,調(diào)整之后是第二大的元素在堆頂
		// 
		//下一次再排序時(shí),排的是堆尾的前一個(gè)了,那個(gè)最大的元素不用再排了,排的就是第二大的元素,
		//再讓堆的最后一個(gè)元素與堆頂元素交換,再進(jìn)行向下調(diào)整,調(diào)整完后第三大的元素就上來(lái)了。
		AdjustDown(a, i, 0);
	}
	//總結(jié):排升序的話(huà),建大根堆
	//排降序建小根堆

	for (int i = 0; i < n; i++)
	{
		printf("%d ", a[i]);
	}
}

堆排序時(shí)間復(fù)雜度

建堆的時(shí)間復(fù)雜度為O(N)
調(diào)整過(guò)程遍歷N個(gè)數(shù)的時(shí)間復(fù)雜度為O(N)
每次調(diào)整一個(gè)數(shù)的時(shí)間復(fù)雜度為O(logN)
總的時(shí)間復(fù)雜度為O(N+N*logN)
綜上:

堆排序的時(shí)間復(fù)雜度為:O(N*logN)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-413943.html

到了這里,關(guān)于【一圖看懂選擇排序】——選擇排序和堆排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 一圖看懂 pkg_resources 模塊:包資源API,資料整理+筆記(大全)

    一圖看懂 pkg_resources 模塊:包資源API,資料整理+筆記(大全)

    本文由 大俠(AhcaoZhu)原創(chuàng),轉(zhuǎn)載請(qǐng)聲明。 鏈接: https://blog.csdn.net/Ahcao2008 全文介紹python的 pkg_resources 模塊(包資源API)、函數(shù)、類(lèi)及類(lèi)的方法和屬性。 它通過(guò)代碼抓取并經(jīng)AI智能翻譯和人工校對(duì)。 是一部不可多得的權(quán)威字典類(lèi)工具書(shū)。它是系列集的一部分。后續(xù)陸續(xù)發(fā)布、敬

    2024年02月06日
    瀏覽(24)
  • 一圖看懂 requests 模塊:用Python編寫(xiě)、供人類(lèi)使用的HTTP庫(kù), 資料整理+筆記(大全)

    一圖看懂 requests 模塊:用Python編寫(xiě)、供人類(lèi)使用的HTTP庫(kù), 資料整理+筆記(大全)

    本文由 大俠(AhcaoZhu)原創(chuàng),轉(zhuǎn)載請(qǐng)聲明。 鏈接: https://blog.csdn.net/Ahcao2008 全文介紹系統(tǒng)內(nèi)置 requests 模塊、函數(shù)、類(lèi)及類(lèi)的方法和屬性。 它通過(guò)代碼抓取并經(jīng)AI智能翻譯和人工校對(duì)。 是一部不可多得的權(quán)威字典類(lèi)工具書(shū)。它是系列集的一部分。后續(xù)陸續(xù)發(fā)布、敬請(qǐng)關(guān)注。【原創(chuàng)

    2024年02月06日
    瀏覽(24)
  • 想要成為AIGC工程師, 卻不知從哪里開(kāi)始學(xué)習(xí)?近嶼全新推出一圖看懂!

    想要成為AIGC工程師, 卻不知從哪里開(kāi)始學(xué)習(xí)?近嶼全新推出一圖看懂!

    在這個(gè)AI技術(shù)飛速發(fā)展的時(shí)代,在人們常常警惕AI將取代自己的工作的時(shí)候,一個(gè)另類(lèi)的說(shuō)法卻悄然流行:“AI不會(huì)取代你的工作,會(huì)取代你的是掌握了AI技能的人?!边@不僅僅是一個(gè)警示,更是一個(gè)機(jī)遇。隨著AI工具如ChatGPT、Midjourney、Stable Diffusion(SD)等的普及,掌握AIGC(人

    2024年04月27日
    瀏覽(27)
  • 一圖看懂 multidict 模塊:類(lèi)似于字典的鍵值對(duì)集合,鍵可以多次出現(xiàn),資料整理+筆記(大全)

    一圖看懂 multidict 模塊:類(lèi)似于字典的鍵值對(duì)集合,鍵可以多次出現(xiàn),資料整理+筆記(大全)

    本文由 大俠(AhcaoZhu)原創(chuàng),轉(zhuǎn)載請(qǐng)聲明。 鏈接: https://blog.csdn.net/Ahcao2008 全文介紹系統(tǒng)內(nèi)置 multidict 模塊(類(lèi)似于字典的鍵值對(duì)集合,鍵可以多次出現(xiàn))、函數(shù)、類(lèi)及類(lèi)的方法和屬性。 它通過(guò)代碼抓取并經(jīng)AI智能翻譯和人工校對(duì)。 是一部不可多得的權(quán)威字典類(lèi)工具書(shū)。它是系列集

    2024年02月04日
    瀏覽(28)
  • 一圖看懂 yarl 模塊:為URL解析和更改提供了方便的URL類(lèi), 資料整理+筆記(大全)

    一圖看懂 yarl 模塊:為URL解析和更改提供了方便的URL類(lèi), 資料整理+筆記(大全)

    本文由 大俠(AhcaoZhu)原創(chuàng),轉(zhuǎn)載請(qǐng)聲明。 鏈接: https://blog.csdn.net/Ahcao2008 全文介紹系統(tǒng)內(nèi)置 yarl 模塊、函數(shù)、類(lèi)及類(lèi)的方法和屬性。 它通過(guò)代碼抓取并經(jīng)AI智能翻譯和人工校對(duì)。 是一部不可多得的權(quán)威字典類(lèi)工具書(shū)。它是系列集的一部分。后續(xù)陸續(xù)發(fā)布、敬請(qǐng)關(guān)注?!驹瓌?chuàng):

    2024年02月04日
    瀏覽(23)
  • 一圖看懂 setuptools 模塊:一個(gè)功能齊全、積極維護(hù)且穩(wěn)定的庫(kù),旨在方便打包Python項(xiàng)目,資料整理+筆記(大全)

    一圖看懂 setuptools 模塊:一個(gè)功能齊全、積極維護(hù)且穩(wěn)定的庫(kù),旨在方便打包Python項(xiàng)目,資料整理+筆記(大全)

    本文由 大俠(AhcaoZhu)原創(chuàng),轉(zhuǎn)載請(qǐng)聲明。 鏈接: https://blog.csdn.net/Ahcao2008 全文介紹python的 setuptools 模塊(一個(gè)功能齊全、積極維護(hù)且穩(wěn)定的庫(kù),旨在方便打包Python項(xiàng)目)、函數(shù)、類(lèi)及類(lèi)的方法和屬性。 它通過(guò)代碼抓取并經(jīng)AI智能翻譯和人工校對(duì)。 是一部不可多得的權(quán)威字典類(lèi)

    2024年02月06日
    瀏覽(25)
  • DS八大排序之直接選擇排序和堆排序

    DS八大排序之直接選擇排序和堆排序

    上一期我們已經(jīng)介紹了,排序、為什么要有排序以及排序在實(shí)際生活中的應(yīng)用。并且介紹并實(shí)現(xiàn)了直接插入排序和它的優(yōu)化即希爾排序~!本期我們?cè)賮?lái)學(xué)習(xí)一組排序 ---- \\\"選擇排序\\\"即直接選擇排序和堆排序~! 直接選擇排序 堆排序 每次從待排序 的數(shù)據(jù)元素的 序列中選出 最小

    2024年02月04日
    瀏覽(20)
  • 用C語(yǔ)言進(jìn)行學(xué)生成績(jī)排序(簡(jiǎn)單選擇排序和堆排序)

    用C語(yǔ)言進(jìn)行學(xué)生成績(jī)排序(簡(jiǎn)單選擇排序和堆排序)

    選擇排序的基本思想是:每一趟(如第i趟)在后面n-i+1 (i=1,2…,n-1) 個(gè)待排序元素中選取最小的元素,作為有序子序列的第i個(gè)元素,直到第n-1趟做完,待排序元素只剩下1個(gè),就不用再選了。選擇排序中的堆排序算法是歷年考查的重點(diǎn)。 根據(jù)上面選擇排序的思想,可以很直觀(guān)

    2024年02月15日
    瀏覽(18)
  • 排序篇:直接插入、希爾、直接選擇和堆排序(C語(yǔ)言)

    排序篇:直接插入、希爾、直接選擇和堆排序(C語(yǔ)言)

    目錄 前言: 一:插入排序 (1)直接插入排序 基礎(chǔ)思路(有個(gè)印象就行,主要看單趟) 單趟排序 完整排序 時(shí)間復(fù)雜度分析 (2)希爾排序 基礎(chǔ)思路(有個(gè)印象就行,主要看單趟) 單趟排序 完整排序 時(shí)間復(fù)雜度分析 二:選擇排序 (1)直接選擇排序 基礎(chǔ)思路 單趟排序 完整排序 時(shí)間復(fù)雜

    2024年02月03日
    瀏覽(22)
  • 【Python排序算法】一文掌握十大排序算法,冒泡排序、插入排序、選擇排序、歸并排序、計(jì)數(shù)排序、基數(shù)排序、希爾排序和堆排序

    【Python排序算法】一文掌握十大排序算法,冒泡排序、插入排序、選擇排序、歸并排序、計(jì)數(shù)排序、基數(shù)排序、希爾排序和堆排序

    目錄 1 冒泡排序(Bubble Sort) 2 插入排序(Insertion Sort) 3 選擇排序(Selection Sort) 4. 快速排序(Quick Sort) 5. 歸并排序(Merge Sort) 6 堆排序 (Heap Sort) 7 計(jì)數(shù)排序 (Counting Sort) 8 基數(shù)排序 (Radix Sort) 9 希爾排序(Shell Sort) 10 桶排序 ? ? 1 冒泡排序(Bubble Sort) ???????冒泡排序

    2024年02月08日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包