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

十大排序算法之冒泡排序、快速排序的介紹

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

個(gè)人主頁(yè):平行線也會(huì)相交
歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會(huì)相交 原創(chuàng)
收錄于專欄【數(shù)據(jù)結(jié)構(gòu)初階(C實(shí)現(xiàn))】
十大排序算法之冒泡排序、快速排序的介紹

冒泡排序

說(shuō)起來(lái)冒泡排序,是我們接觸到的最早的一個(gè)排序算法了,這次就當(dāng)進(jìn)行一個(gè)鞏固提升了。冒泡排序還被稱為交換排序
冒泡排序:

它重復(fù)地走訪過(guò)要排序的元素列,依次比較兩個(gè)相鄰的元素,如果順序(如從大到小、首字母從Z到A)錯(cuò)誤就把他們交換過(guò)來(lái)。走訪元素的工作是重復(fù)地進(jìn)行,直到?jīng)]有相鄰元素需要交換,也就是說(shuō)該元素列已經(jīng)排序完成。

下面是冒泡排序的動(dòng)態(tài)圖:

十大排序算法之冒泡排序、快速排序的介紹
冒泡排序特點(diǎn):

1.時(shí)間復(fù)雜度:O(N^2)。
2.空間復(fù)雜度:O(1).
3.穩(wěn)定性:穩(wěn)定。

冒泡排序代碼

void BubbleSort(int* a, int n)
{
	for (int j = 0; j < n - 1; j++)
	{
		for (int i = 1; i < n - j; i++)
		{
			if (a[i - 1] > a[i])
				Swap(&a[i - 1], &a[i]);
		}
	}
}

運(yùn)行結(jié)果如下:
十大排序算法之冒泡排序、快速排序的介紹

冒泡排序優(yōu)化

我們知道冒泡排序的時(shí)間復(fù)雜度最壞情況是O(N^2),最好情況依然是O(N^2)。所以我們對(duì)其進(jìn)行一個(gè)優(yōu)化:

void BubbleSort(int* a, int n)
{
	for (int j = 0; j < n - 1; j++)
	{
		bool exchange = false;
		for (int i = 1; i < n - j; i++)
		{
			if (a[i - 1] > a[i])
			{
				Swap(&a[i - 1], &a[i]);
			}
			exchange = true;
		}
		if (exchange == false)
			break;
	}
}

如果我們冒泡完一趟以后,發(fā)現(xiàn)數(shù)組有序(即一次交換都沒(méi)有發(fā)生),那么我們直接推出循環(huán)即可完成排序。
上面改進(jìn)的冒泡排序最好的情況的時(shí)間復(fù)雜度是O(N)。

十大排序算法之冒泡排序、快速排序的介紹

快速排序

快速排序使用的是分治策略一個(gè)序列分為兩個(gè)子序列。我們現(xiàn)在序列中選取一個(gè)元素作為基準(zhǔn)值(或者稱為關(guān)鍵值key),然后重新排序這個(gè)序列,如果是升序的話,所有比基準(zhǔn)值大的元素放到基準(zhǔn)值的右邊,所有比基準(zhǔn)值大的元素放在基準(zhǔn)值的左邊,經(jīng)過(guò)此分區(qū)結(jié)束之后,然后對(duì)左右子序列重復(fù)此過(guò)程,直到所有元素出現(xiàn)在相對(duì)應(yīng)的位置上。
其實(shí)簡(jiǎn)單來(lái)說(shuō)就是選出一個(gè)基準(zhǔn)值(一般選最左邊或者最右邊的),把這個(gè)基準(zhǔn)值放到它所對(duì)應(yīng)的位置上去。

下面是快速排序的動(dòng)態(tài)圖:
十大排序算法之冒泡排序、快速排序的介紹
上圖就是選取最左邊的5作為基準(zhǔn)值,然后比5大的元素放到5的右邊,比5小的元素放到5的左邊。最終5就會(huì)出現(xiàn)在其所對(duì)應(yīng)的位置上。
舉個(gè)例子:
現(xiàn)在我們來(lái)對(duì)數(shù)組{6,1,2,7,9,3,4,5,10,8}來(lái)進(jìn)行排序。請(qǐng)看圖解:

十大排序算法之冒泡排序、快速排序的介紹
經(jīng)過(guò)一次單趟排序后,上圖中的6已經(jīng)處于其對(duì)應(yīng)的位置了,所以對(duì)于快速排序的單趟排序中,本質(zhì)也是把一個(gè)元素排好
十大排序算法之冒泡排序、快速排序的介紹

快速排序代碼

QuickSort(int* a, int left, int right)
{
	if (left >= right)
		return;
	int begin = left, end = right;

	int keyi = left;
	while (left < right)
	{
		//右邊找小
		while (left < right && a[right] >= a[keyi])
		{
			right--;
		}

		//左邊找大
		while (left < right && a[left] <= a[keyi])
		{
			left++;
		}
		Swap(&a[left], &a[right]);
	}
	Swap(&a[left], &a[keyi]);
	keyi = left;

	//接下來(lái)進(jìn)行遞歸
	//[begin , keyi - 1]  keyi  [keyi + 1 , end]   
	QuickSort(a, begin, keyi - 1);
	QuickSort(a, keyi + 1, end);
}

運(yùn)行結(jié)果如下:
十大排序算法之冒泡排序、快速排序的介紹文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-467314.html

到了這里,關(guān)于十大排序算法之冒泡排序、快速排序的介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(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)文章

  • 十大排序算法(冒泡排序、插入排序、選擇排序、希爾排序、堆排序、快排、歸并排序、桶排序、計(jì)數(shù)排序、基數(shù)排序)

    十大排序算法(冒泡排序、插入排序、選擇排序、希爾排序、堆排序、快排、歸并排序、桶排序、計(jì)數(shù)排序、基數(shù)排序)

    目錄 一、冒泡排序: 二、插入排序: 三、選擇排序: 四、希爾排序: 五、堆排序: 六、快速排序: 6.1挖坑法: 6.2左右指針?lè)?6.3前后指針?lè)ǎ?七、歸并排序: 八、桶排序: 九、計(jì)數(shù)排序: 9.1絕對(duì)映射: 9.2現(xiàn)對(duì)映射: 十、基數(shù)排序:? 1、思路: 通過(guò)對(duì)待排序序列從前

    2024年03月11日
    瀏覽(29)
  • 【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)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】十大經(jīng)典排序算法-快速排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】十大經(jīng)典排序算法-快速排序

    ?? 個(gè)人博客: www.hellocode.top ?? Java知識(shí)導(dǎo)航: Java-Navigate ?? CSDN: HelloCode. ?? 知乎 :HelloCode ?? 掘金 :HelloCode ?如有問(wèn)題,歡迎指正,一起學(xué)習(xí)~~ 快速排序(Quick Sort)是一種高效的排序算法,是對(duì)冒泡排序的優(yōu)化。它采用分治法(Divide and Conquer)的思想,將待排序序列

    2024年02月13日
    瀏覽(24)
  • 排序算法1:冒泡排序、快速排序、插入排序

    排序算法1:冒泡排序、快速排序、插入排序

    排序算法:交換類排序,插入類排序、選擇類排序、歸并類排序 交換類排序:冒泡排序、快速排序 一、冒泡排序 ?時(shí)間復(fù)雜度:內(nèi)層是ji,外層是從0到n-1,運(yùn)行的總次數(shù)是1+2+3+4+...+n-1,即O() 空間復(fù)雜度:O(1),沒(méi)有使用額外空間,不會(huì)因?yàn)閚的變化而變化 如果數(shù)組本身有序,最

    2024年02月21日
    瀏覽(19)
  • 【排序算法(三)】交換排序(冒泡排序&&快速排序)

    【排序算法(三)】交換排序(冒泡排序&&快速排序)

    ? ???個(gè)人主頁(yè):@Sherry的成長(zhǎng)之路 ??學(xué)習(xí)社區(qū):Sherry的成長(zhǎng)之路(個(gè)人社區(qū)) ??專欄鏈接:數(shù)據(jù)結(jié)構(gòu) ?? 長(zhǎng)路漫漫浩浩,萬(wàn)事皆有期待 上一篇博客:【排序算法(二)】選擇排序(直接選擇排序堆排序) 冒泡排序?qū)儆诮粨Q排序,所謂 交換排序 就是就是根據(jù)序列中兩個(gè)記錄

    2023年04月22日
    瀏覽(33)
  • 排序算法亂燉: 快速排序、歸并排序、冒泡排序

    1. 快速排序原地版 最好情況的時(shí)間復(fù)雜度 :O(nlogn),logn為遞歸的層數(shù),n為每層遞歸中總的時(shí)間復(fù)雜度。 最差情況的時(shí)間復(fù)雜度 :O(n*n) 2. 快速排序空間換時(shí)間版 最好情況的時(shí)間復(fù)雜度 :低于O(nlogn) 思想 :分治。分而治之 ,遞歸的把數(shù)據(jù)一分為二,直到數(shù)組中只有一個(gè)元素

    2024年02月11日
    瀏覽(21)
  • C/C++排序算法(三)—— 冒泡排序和快速排序

    C/C++排序算法(三)—— 冒泡排序和快速排序

    本篇文章將帶領(lǐng)大家學(xué)習(xí) 冒泡排序 和 快速排序 ,它倆都屬于交換排序。 冒泡排序的英文 Bubble Sort ,是一種最基礎(chǔ)的 交換排序 。 大家一定都喝過(guò)汽水,汽水中常常有許多小小的氣泡,嘩啦嘩啦飄到上面來(lái)。這是因?yàn)榻M成小氣泡的二氧化碳比水要輕,所以小氣泡可以一點(diǎn)一

    2024年02月03日
    瀏覽(17)
  • 快速了解四種排序算法:希爾排序,堆排序,快速排序,冒泡排序(c語(yǔ)言)

    快速了解四種排序算法:希爾排序,堆排序,快速排序,冒泡排序(c語(yǔ)言)

    ?一個(gè)程序員一生中可能會(huì)邂逅各種各樣的算法,但總有那么幾種,是作為一個(gè)程序員一定會(huì)遇見且大概率需要掌握的算法。 1.1算法(algorithm ) 是指令的集合,是為解決特定問(wèn)題而規(guī)定的一系列操作。 它是明確定義的可計(jì)算過(guò)程,以一個(gè)數(shù)據(jù)集合作為輸入,并產(chǎn)生一個(gè)數(shù)據(jù)

    2024年02月16日
    瀏覽(23)
  • 算法__數(shù)組排序_冒泡排序&直接選擇排序&快速排序

    本篇主要講解數(shù)組排序相關(guān)的三種算法,冒泡排序,直接排序和快速排序。 在數(shù)組中依次比較相鄰的兩個(gè)元素,當(dāng)滿足左側(cè)大于右側(cè)時(shí)(升序排序),則兩個(gè)位置的元素互換。如此重復(fù),最終即可完成數(shù)組的排序。 依次找出數(shù)組中最小值的索引,并和數(shù)組左側(cè)的元素進(jìn)行位

    2024年02月07日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)】排序算法(二)—>冒泡排序、快速排序、歸并排序、計(jì)數(shù)排序

    【數(shù)據(jù)結(jié)構(gòu)】排序算法(二)—>冒泡排序、快速排序、歸并排序、計(jì)數(shù)排序

    ?? 樊梓慕: 個(gè)人主頁(yè) ??? 個(gè)人專欄: 《C語(yǔ)言》《數(shù)據(jù)結(jié)構(gòu)》《藍(lán)橋杯試題》《LeetCode刷題筆記》《實(shí)訓(xùn)項(xiàng)目》 ?? 每一個(gè)不曾起舞的日子,都是對(duì)生命的辜負(fù) 目錄 前言 1.冒泡排序 2.快速排序 2.1Hoare版 2.2占坑版 2.3前后指針版 2.4三數(shù)取中對(duì)快速排序的優(yōu)化 2.5非遞歸版 3.歸

    2024年02月08日
    瀏覽(34)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包