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

【八大排序(十)】八大排序效率與穩(wěn)定性分析

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

??博主CSDN主頁:杭電碼農(nóng)-NEO??
?
?專欄分類:八大排序?qū)?
?
??代碼倉庫:NEO的學(xué)習(xí)日記??
?
??關(guān)注我??帶你學(xué)習(xí)排序知識(shí)
? ????


【八大排序(十)】八大排序效率與穩(wěn)定性分析


1. 前言

比較八大排序不能直接將
這八個(gè)排序放在一起討論
我們根據(jù)大致效率將它們分為兩組:
(每個(gè)排序的詳情鏈接在后面)

1. 第一組

  • 插入排序 詳情
  • 選擇排序 詳情
  • 冒泡排序 (略)

2. 第二組

  • 堆排序 詳情
  • 希爾排序 詳情
  • 快速排序 詳情
  • 歸并排序 詳情

【八大排序(十)】八大排序效率與穩(wěn)定性分析

各大排序的進(jìn)階版本被放在了專欄:
? ? 八大排序?qū)?/p>

本篇文章將從穩(wěn)定性和效率兩個(gè)方面
來分析這兩組排序


2. 什么是排序算法的穩(wěn)定性?

官方話語是這樣的:

排序序列中,有多個(gè)具有相同關(guān)鍵字的記錄經(jīng)過排序,記錄對(duì)應(yīng)的相對(duì)次序保持不變,這就是排序的穩(wěn)定性。

舉個(gè)例子,定義一個(gè)無序數(shù)組:

int a[]={5(i),3,6,4,5(j),2,8};

數(shù)組中有兩個(gè)5
把第一個(gè)5記為 i
第二個(gè)5記為 j
當(dāng)我們用任意算法排好序后

int a[]={2,3,4,5,5,6,8};//排好序后的數(shù)組

若 i 還在 j 前面,則這個(gè)算法是穩(wěn)定的

int a[]={2,3,4,i,j,6,8};

若 i 在 j 后面,則算法不穩(wěn)定

int a[]={2,3,4,j,i,6,8};

3. 各大排序穩(wěn)定性分析

想要搞清楚排序是否穩(wěn)定
就要明白內(nèi)部的實(shí)現(xiàn)思路!


3.1 插入和希爾排序的分析

1. 插入排序:

插入排序是從數(shù)組中第一個(gè)元素開始
一一和它后面的元素做比較
并且一個(gè)元素向前挪動(dòng)停下來的條件是:
當(dāng)前元素的值大于等于正在挪動(dòng)的元素

結(jié)論: 是穩(wěn)定的

2. 希爾排序:

雖然希爾排序是對(duì)插入排序的優(yōu)化
但是希爾排序多了一個(gè)分組預(yù)排序
當(dāng)相同的數(shù)組被分到同一組時(shí)
它們的順序不會(huì)變化
但是當(dāng)相同的數(shù)據(jù)分到不同組時(shí)
排好序后的順序就有可能改變!

結(jié)論: 不是穩(wěn)定的


3.2 選擇,堆排序的分析

1. 選擇排序:

選擇排序明顯是不穩(wěn)定的
當(dāng)前循環(huán)選出的最大值是
這個(gè)值第一次出現(xiàn)的位置
將它放在數(shù)組最后,第二層循環(huán)
尋找次大值時(shí)若和剛剛的值相同
這個(gè)次打值就到倒數(shù)第二個(gè)位置了

結(jié)論: 不穩(wěn)定的

2. 堆排序:

堆排序和選擇排序類似
我們直接舉個(gè)向下調(diào)整的例子:

【八大排序(十)】八大排序效率與穩(wěn)定性分析

藍(lán)色的5從第一個(gè)位置跑到最后一個(gè)了

結(jié)論: 不穩(wěn)定的


3.3 冒泡,快速排序的分析

1. 冒泡排序:

冒泡排序是挨個(gè)兒比較
挨個(gè)兒交換.所以不會(huì)將相同的值
交換到不同的位置

結(jié)論: 穩(wěn)定的

2. 快速排序

快速排序比較特殊.
當(dāng)基準(zhǔn)值key和L,R指針相遇的點(diǎn)
對(duì)應(yīng)的值相同時(shí),會(huì)改變位置!
畫圖說明:

【八大排序(十)】八大排序效率與穩(wěn)定性分析

5的前后順序發(fā)生了變化

結(jié)論: 不穩(wěn)定的


3.4 歸并排序分析

歸并排序可以穩(wěn)定也可以不穩(wěn)定
當(dāng)左右子數(shù)組中出現(xiàn)相同值時(shí)
如果先將左子數(shù)組的數(shù)據(jù)入數(shù)組
那么歸并排序就是穩(wěn)定的
如果先將右子數(shù)組的數(shù)據(jù)入數(shù)組
那么歸并排序就是不穩(wěn)定的

所以我們寫歸并排序時(shí)
數(shù)據(jù)相同時(shí)盡量先下左邊

結(jié)論: 穩(wěn)定的!


4. 各大算法效率比較

現(xiàn)實(shí)生活中處理的信息量往往非常大
這里我們隨機(jī)生成五百萬個(gè)數(shù)排序
試一試每一個(gè)排序算法要花多少毫秒?

注:clock是記錄程序
走到當(dāng)前這一行運(yùn)行的時(shí)長(zhǎng)
兩個(gè)clock相減就是中間程序運(yùn)行的時(shí)間

//測(cè)試性能
void TestOP()
{
	srand(time(0));
	const int N = 5000000;
	int* a1 = (int*)malloc(sizeof(int) * N);
	int* a2 = (int*)malloc(sizeof(int) * N);
	int* a3 = (int*)malloc(sizeof(int) * N);
	int* a4 = (int*)malloc(sizeof(int) * N);
	int* a5 = (int*)malloc(sizeof(int) * N);
	int* a6 = (int*)malloc(sizeof(int) * N);
	int* a7 = (int*)malloc(sizeof(int) * N);

	for (int i = 0; i < N; ++i)
	{
		a1[i] = rand();
		a2[i] = a1[i];
		a3[i] = a1[i];
		a4[i] = a1[i];
		a5[i] = a1[i];
		a6[i] = a1[i];
	}

	int begin1 = clock();
	InsertSort(a2, N);
	int end1 = clock();

	int begin2 = clock();
	ShellSort(a2, N);
	int end2 = clock();

	int begin3 = clock();
	SelectSort(a3, N);
	int end3 = clock();

	int begin4 = clock();
	HeapSort(a2, N);
	int end4 = clock();

	int begin5 = clock();
	QuickSort(a2, 0, N - 1);
	QuickSort(a2, 0, N - 1);
	int end5 = clock();

	int begin6 = clock();
	MergeSort(a2, N);
	int end6 = clock();

	printf("InsertSort:%d ms\n", end1 - begin1);
	printf("ShellSort:%d ms\n", end2 - begin2);
	printf("SelectSort:%d ms\n", end3 - begin3);
	printf("HeapSort:%d ms\n", end4 - begin4);
	printf("QuickSort:%d ms\n", end5 - begin5);
	printf("MergeSort:%d ms\n", end6 - begin6);

	free(a1);
	free(a2);
	free(a3);
	free(a4);
	free(a5);
	free(a6);
}

對(duì)于五百萬個(gè)數(shù)據(jù)來說
插入,選擇,冒泡排序運(yùn)行的時(shí)間會(huì)很長(zhǎng)
所以我們這里直接比較第二組排序
:

五百萬個(gè)數(shù)據(jù):

【八大排序(十)】八大排序效率與穩(wěn)定性分析

一百萬個(gè)數(shù)據(jù):
【八大排序(十)】八大排序效率與穩(wěn)定性分析

每個(gè)排序效率都不錯(cuò)
快排與歸并格外的好!


5. 總結(jié)與代碼分享

八大排序整體完結(jié)!
下面分享一個(gè)知識(shí)表格大全:

排序方法 最好情況 最壞情況 輔助空間 穩(wěn)定性
冒泡排序 O(N) O(N2) O(1) 穩(wěn)定
選擇排序 O(N2 O(N2 O(1) 不穩(wěn)定
插入排序 O(N) O(N2 O(1) 穩(wěn)定
希爾排序 O(N1.3) O(N2) O(1) 不穩(wěn)定
堆排序 O(N*log2N) O(N*log2N) O(N) 不穩(wěn)定
快速排序 O(N*log2N) O(N2) O(log2N~N) 不穩(wěn)定
歸并排序 O(N*log2N) O(N*log2N) O(N) 穩(wěn)定

我將C語言實(shí)現(xiàn)八大排序
所有代碼匯總分享給大家:

gitee代碼倉庫

八大排序所有內(nèi)容結(jié)束!
【八大排序(十)】八大排序效率與穩(wěn)定性分析文章來源地址http://www.zghlxwxcb.cn/news/detail-502770.html

?? 下期預(yù)告:C嘎嘎初階 ??

到了這里,關(guān)于【八大排序(十)】八大排序效率與穩(wěn)定性分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • Lyapunov穩(wěn)定性分析1(正定函數(shù)、二次型正定判定)

    Lyapunov穩(wěn)定性分析1(正定函數(shù)、二次型正定判定)

    1.1 定義: 令 V ( x )是向量 x 的 標(biāo)量函數(shù) , S 是x空間包含原點(diǎn)的封閉有限區(qū)域。如果對(duì)于 S 中的所有 x ,都有: 則 V ( x )是 正定的 (半正定)。正定函數(shù)更直觀的描述如下圖所示: 如果條件(3)中不等式的符號(hào) 反向 ,則稱V(x)是 負(fù)定的 (負(fù)半定的)。 如果在S域內(nèi),不論

    2024年02月16日
    瀏覽(27)
  • TI 高精度實(shí)驗(yàn)室《運(yùn)算放大器系列--穩(wěn)定性分析》

    TI 高精度實(shí)驗(yàn)室《運(yùn)算放大器系列--穩(wěn)定性分析》

    TI 高精度實(shí)驗(yàn)室《運(yùn)算放大器系列–穩(wěn)定性分析》 一個(gè)不穩(wěn)定的運(yùn)放電路將會(huì)得到失真的瞬態(tài)響應(yīng),輸出波形不是預(yù)期的結(jié)果。當(dāng)輸入或者負(fù)載變化時(shí),這就會(huì)引起輸出較大的過沖和失調(diào),甚至導(dǎo)致持續(xù)的振蕩波形。 通常穩(wěn)定性問題源于在運(yùn)放輸出或者反相輸入端連接了電

    2024年02月04日
    瀏覽(22)
  • 畢業(yè)設(shè)計(jì)-基于 Matlab 的電力系統(tǒng)穩(wěn)定性分析與仿真

    畢業(yè)設(shè)計(jì)-基于 Matlab 的電力系統(tǒng)穩(wěn)定性分析與仿真

    目錄 前言 課題背景和意義 實(shí)現(xiàn)技術(shù)思路 一、簡(jiǎn)單電力系統(tǒng)仿真軟件簡(jiǎn)介 二、電力系統(tǒng)穩(wěn)定性仿真分析 三、結(jié)論 實(shí)現(xiàn)效果圖樣例 最后 ? ? ??大四是整個(gè)大學(xué)期間最忙碌的時(shí)光,一邊要忙著備考或?qū)嵙?xí)為畢業(yè)后面臨的就業(yè)升學(xué)做準(zhǔn)備,一邊要為畢業(yè)設(shè)計(jì)耗費(fèi)大量精力。近幾年

    2024年02月02日
    瀏覽(624)
  • 基于STATCOM的風(fēng)力發(fā)電機(jī)穩(wěn)定性問題仿真分析(Simulink)

    基于STATCOM的風(fēng)力發(fā)電機(jī)穩(wěn)定性問題仿真分析(Simulink)

    ???????? 歡迎來到本博客 ???????? ??博主優(yōu)勢(shì): ?????? 博客內(nèi)容盡量做到思維縝密,邏輯清晰,為了方便讀者。 ?? 座右銘: 行百里者,半于九十。 ?????? 本文目錄如下: ?????? 目錄 ??1 概述 ??2 運(yùn)行結(jié)果 ??3?參考文獻(xiàn) ??4 Matlab代碼實(shí)現(xiàn) ? STAT

    2024年02月02日
    瀏覽(18)
  • 模擬電路設(shè)計(jì)(12)--- 運(yùn)算放大器閉環(huán)增益計(jì)算及放大器電路穩(wěn)定性分析

    模擬電路設(shè)計(jì)(12)--- 運(yùn)算放大器閉環(huán)增益計(jì)算及放大器電路穩(wěn)定性分析

    閉環(huán)增益計(jì)算 運(yùn)算放大器深度負(fù)反饋狀態(tài),放大電路的增益為1/F(s)。而在實(shí)際應(yīng)用中很少去計(jì)算F(s),一般通過深度負(fù)反饋時(shí)的“虛短”、“虛斷”概念去計(jì)算。深度負(fù)反饋時(shí),1+A(s)F(s) 1,則A(s)F(s) = Xf(s)/X’i(s) 1,而Xi(s)=X’i(s)+Xf(s),那么X’i(s)可以忽略不計(jì),Xi(s)=Xf(s)。 對(duì)于

    2024年02月16日
    瀏覽(18)
  • 振弦傳感器和在線監(jiān)測(cè)系統(tǒng)保障巖土工程項(xiàng)目穩(wěn)定性:案例分析

    振弦傳感器和在線監(jiān)測(cè)系統(tǒng)保障巖土工程項(xiàng)目穩(wěn)定性:案例分析

    振弦傳感器和在線監(jiān)測(cè)系統(tǒng)保障巖土工程項(xiàng)目穩(wěn)定性:案例分析 以下是一個(gè)振弦傳感器和振弦采集儀及在線監(jiān)測(cè)系統(tǒng)形成一套完整鏈條的巖土工程監(jiān)測(cè)案例: 項(xiàng)目背景:一家建設(shè)公司在中國某地進(jìn)行了一項(xiàng)巖土工程項(xiàng)目,該項(xiàng)目涉及到一座橋梁的建設(shè)。建設(shè)公司決定使用振

    2024年02月15日
    瀏覽(16)
  • 現(xiàn)控報(bào)告-- 分析倒立擺系統(tǒng)穩(wěn)定性、能控性及能觀性分析,設(shè)計(jì)PID控制方案(附matlab)

    現(xiàn)控報(bào)告-- 分析倒立擺系統(tǒng)穩(wěn)定性、能控性及能觀性分析,設(shè)計(jì)PID控制方案(附matlab)

    目錄 摘要 數(shù)學(xué)建模 1、 倒立擺系統(tǒng)簡(jiǎn)介???????? 2、 直線倒立擺系統(tǒng)數(shù)學(xué)模型 系統(tǒng)傳遞函數(shù)模型? 系統(tǒng)狀態(tài)空間數(shù)學(xué)模型? 系統(tǒng)分析 3、 直線一級(jí)倒立擺系統(tǒng)分析 (1)系統(tǒng)穩(wěn)定性分析? (2)系統(tǒng)能控性和能觀性分析 仿真 4、 直線倒立擺系統(tǒng)PID控制與仿真? (1)PID控制

    2024年02月07日
    瀏覽(58)
  • 【ARM Linux 系統(tǒng)穩(wěn)定性分析入門及漸進(jìn)12 -- GDB內(nèi)存查看命令 “x“(examine)】

    請(qǐng)閱讀 【ARM Linux 系統(tǒng)穩(wěn)定性分析專欄導(dǎo)讀】 上篇文章:ARM Linux 系統(tǒng)穩(wěn)定性分析入門及漸進(jìn)11 – GDB( print 和 p 的使用| @ 和 ::的使用|ptype|{<type>} <addr> ) examine 是GDB中x命令的全稱,用于檢查內(nèi)存中的內(nèi)容。這個(gè)命令非常強(qiáng)大,可以以多種格式顯示內(nèi)存內(nèi)容。 examine 命令

    2024年02月12日
    瀏覽(23)
  • ARM Linux 系統(tǒng)穩(wěn)定性分析入門及漸進(jìn) 13 -- gdb 反匯編 disassemble 命令詳細(xì)介紹及舉例】

    請(qǐng)閱讀 【ARM Linux 系統(tǒng)穩(wěn)定性分析專欄導(dǎo)讀】 在GNU調(diào)試器(GDB)中,有許多命令可以幫助我們調(diào)試應(yīng)用程序。 gdb : 這是一個(gè)強(qiáng)大的Unix下的程序調(diào)試工具。以下是使用gdb的一個(gè)簡(jiǎn)單示例: 在這個(gè)例子中,我們啟動(dòng)了 gdb 并將我們的程序 test 作為參數(shù)傳遞。 可執(zhí)行程序 test 是由

    2024年02月11日
    瀏覽(39)
  • 八大排序算法(含時(shí)間復(fù)雜度、空間復(fù)雜度、算法穩(wěn)定性)

    八大排序算法(含時(shí)間復(fù)雜度、空間復(fù)雜度、算法穩(wěn)定性)

    下列算法默認(rèn)都是對(duì)數(shù)組進(jìn)行升序 1.1、算法思想 插入排序是一種簡(jiǎn)單直觀的排序算法,它的工作原理是通過構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。 插入排序的具體步驟如下: 從第一個(gè)元素開始,該元素可以認(rèn)為已經(jīng)被排序;

    2024年02月08日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包