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

【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡(jiǎn)單選擇排序算法

這篇具有很好參考價(jià)值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡(jiǎn)單選擇排序算法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??個(gè)人主頁(yè):修修修也

??所屬專欄:數(shù)據(jù)結(jié)構(gòu)

??操作環(huán)境:Visual Studio 2022

【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡(jiǎn)單選擇排序算法,C語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),排序算法,算法,學(xué)習(xí),c語(yǔ)言,筆記


目錄

一.簡(jiǎn)單選擇排序簡(jiǎn)介及思路

二.簡(jiǎn)單選擇排序的代碼實(shí)現(xiàn)

三.簡(jiǎn)單選擇排序的優(yōu)化

四.簡(jiǎn)單選擇排序的時(shí)間復(fù)雜度分析

結(jié)語(yǔ)


一.簡(jiǎn)單選擇排序簡(jiǎn)介及思路

簡(jiǎn)單選擇排序算法(Simple Selection Sort)是一種簡(jiǎn)單直觀的選擇排序算法.

它的基本操作是:

  • 每一次通過(guò)n-i次關(guān)鍵字間的比較,從n-i+1個(gè)數(shù)據(jù)中選出關(guān)鍵字最小(大)的數(shù)據(jù),并和第i(1≤i≤n)個(gè)數(shù)據(jù)交換
  • 重復(fù)n-1次上述操作,直到全部待排序的數(shù)據(jù)元素排完.

算法動(dòng)圖演示如下:

【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡(jiǎn)單選擇排序算法,C語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),排序算法,算法,學(xué)習(xí),c語(yǔ)言,筆記


二.簡(jiǎn)單選擇排序的代碼實(shí)現(xiàn)

算法實(shí)現(xiàn)步驟:(以升序?yàn)槔?

  1. 在元素集合arr[i]~arr[n-1]中選擇關(guān)鍵碼最小(大)的數(shù)據(jù)元素.
  2. 若它不是這組元素中的第一個(gè)(最后一個(gè))元素,則將它與這組元素中的第一個(gè)(最后一個(gè))元素交換.
  3. 在剩余的arr[i+1]~arr[n-1](arr[i]~arr[n-2])集合中,重復(fù)上述步驟,直到集合剩余一個(gè)元素.

清楚了實(shí)現(xiàn)步驟后,代碼的實(shí)現(xiàn)就比較簡(jiǎn)單了,代碼如下:

//交換函數(shù)
void Swap(int* a, int* b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

//直接選則排序(升序
void SelectSort(int* a, int n)
{
	int left = 0;

	while (left < n - 1)
	{
		int mini = left;
		for (int i = left + 1; i <= n - 1; i++)
		{
			if (a[i] < a[mini])
			{
				mini = i;
			}
		}
		Swap(&a[left], &a[mini]);
		left++;
	}
}

三.簡(jiǎn)單選擇排序的優(yōu)化

我們?cè)谠O(shè)計(jì)簡(jiǎn)單選擇排序時(shí),思路往往都是每趟循環(huán)選出一個(gè)最大最小的將其放在相應(yīng)位置上,那么其實(shí)我們可不可以一趟直接將最大和最小的兩個(gè)元素選出來(lái)呢?

依照這個(gè)思路,我們對(duì)簡(jiǎn)單選擇排序進(jìn)行優(yōu)化,使其一趟就可以將最大的元素和最小的元素都選出來(lái)交換到相應(yīng)的位置上,綜上,代碼實(shí)現(xiàn)如下:

//交換
void Swap(int* a, int* b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

//選擇排序(直接選擇排序)
void SelectSort(int* a, int n)
{
	//優(yōu)化:一趟選出最大和最小的
	int left = 0;
	int right = n - 1;

	while (left < right)
	{
		int mini = left, maxi = left;
		for (int i = left + 1; i <= right; i++)
		{
			if (a[i] < a[mini])
			{
				mini = i;
			}
			if (a[i] > a[maxi])
			{
				maxi = i;
			}
		}
		Swap(&a[left], &a[mini]);

		//如果left和maxi重疊,交換后需要修正一下再交換right和maxi
		if (left == maxi)
		{
			maxi = mini;
		}

		Swap(&a[right], &a[maxi]);

		left++;
		right--;
	}
}

注意:

??????? 當(dāng)我們?cè)谝惶吮容^結(jié)束后選出mini和maxi并做交換的時(shí)候,要小心如果left記錄的位置恰好存放的是maxi,則第一步交換left和mini后我們就要重新對(duì)maxi的位置做一個(gè)修正,如圖:

【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡(jiǎn)單選擇排序算法,C語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),排序算法,算法,學(xué)習(xí),c語(yǔ)言,筆記

【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡(jiǎn)單選擇排序算法,C語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),排序算法,算法,學(xué)習(xí),c語(yǔ)言,筆記

【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡(jiǎn)單選擇排序算法,C語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),排序算法,算法,學(xué)習(xí),c語(yǔ)言,筆記


四.簡(jiǎn)單選擇排序的時(shí)間復(fù)雜度分析

我們可以發(fā)現(xiàn),簡(jiǎn)單選擇排序的特點(diǎn)是:

???????? 元素挪動(dòng)交換次數(shù)很少,但是元素比較次數(shù)很多,并且無(wú)論是數(shù)組天生順序的情況還是天生逆序的情況,元素比較次數(shù)都是一樣的,都是:T(n)=(n-1)+(n-2)+...+2+1=n(n-1) / 2 次.

????????? 而對(duì)于交換次數(shù)而言,最好的時(shí)候,交換次數(shù)為0次,最壞的時(shí)候,交換次數(shù)為n-1次.

????????? 基于最終的排序時(shí)間交換次數(shù)和比較次數(shù)的總和,因此,總的時(shí)間復(fù)雜度依然是O(n^2).


結(jié)語(yǔ)

希望這篇簡(jiǎn)單選擇排序算法詳解能對(duì)大家有所幫助,歡迎大佬們留言或私信與我交流.

有關(guān)更多排序相關(guān)知識(shí)可以移步:

【數(shù)據(jù)結(jié)構(gòu)】八大排序算法?https://blog.csdn.net/weixin_72357342/article/details/135038495?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22135038495%22%2C%22source%22%3A%22weixin_72357342%22%7D&fromshare=blogdetail

學(xué)海漫浩浩,我亦苦作舟!關(guān)注我,大家一起學(xué)習(xí),一起進(jìn)步!

?相關(guān)文章推薦

【數(shù)據(jù)結(jié)構(gòu)】八大排序之冒泡排序算法

【數(shù)據(jù)結(jié)構(gòu)】八大排序之希爾排序算法

【數(shù)據(jù)結(jié)構(gòu)】八大排序之直接插入排序算法

【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡(jiǎn)單選擇排序

【數(shù)據(jù)結(jié)構(gòu)】八大排序之堆排序算法

【數(shù)據(jù)結(jié)構(gòu)】八大排序之快速排序算法

【數(shù)據(jù)結(jié)構(gòu)】八大排序算法之歸并排序算法

【數(shù)據(jù)結(jié)構(gòu)】八大排序之計(jì)數(shù)排序算法


數(shù)據(jù)結(jié)構(gòu)排序算法篇思維導(dǎo)圖:

【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡(jiǎn)單選擇排序算法,C語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),排序算法,算法,學(xué)習(xí),c語(yǔ)言,筆記

【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡(jiǎn)單選擇排序算法,C語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),排序算法,算法,學(xué)習(xí),c語(yǔ)言,筆記文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-790986.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡(jiǎ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)文章

  • 數(shù)據(jù)結(jié)構(gòu)之八大排序算法

    數(shù)據(jù)結(jié)構(gòu)之八大排序算法

    排序:所謂排序,就是使一串記錄,按照其中的某個(gè)或某些的大小,遞增或遞減的排列起來(lái)的操作。 下面是常見的排序算法: 直接插入排序是一種簡(jiǎn)單的插入排序法,其基本思想是: 把待排序的元素按其值的大小逐個(gè)插入到一個(gè)已經(jīng)排好序的有序序列中,直到所有的

    2023年04月14日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】八大排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】八大排序

    初看這些概念可能一臉懵,但是沒有關(guān)系,等下面學(xué)完幾種排序之后在來(lái)看這些概念非常容易理解。 排序:所謂排序,就是使一串記錄,按照其中的某個(gè)或某些的大小,遞增或遞減的排列起來(lái)的操作。 穩(wěn)定性:假定在待排序的記錄序列中,存在多個(gè)具有相同的

    2024年02月01日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】--八大排序算法【完整版】

    【數(shù)據(jù)結(jié)構(gòu)】--八大排序算法【完整版】

    本文主要講解代碼及代碼思路,涵蓋八大排序的全面知識(shí)點(diǎn) ———————————————— 目錄 一、直接插入排序 二、希爾排序(直接插入排序的改良版) 三、選擇排序(直接選擇排序) 四、堆排序 五、冒泡排序 六、快速排序 1、 左右指針法 2、挖坑法: 3、前后指針

    2024年02月16日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)】 常見的八大排序算法

    【數(shù)據(jù)結(jié)構(gòu)】 常見的八大排序算法

    排序有 內(nèi)部排序和外部排序 ,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,這里八大排序就是內(nèi)部排序,指直接插入,希爾,選擇,堆排,冒泡,快排,歸并,計(jì)數(shù)。 下面讓我們來(lái)共同學(xué)習(xí)這八大排序吧!?????? 什么是外部排序: 外排序是數(shù)據(jù)量較大,內(nèi)存放不下,數(shù)據(jù)放到外

    2024年02月12日
    瀏覽(96)
  • 數(shù)據(jù)結(jié)構(gòu)__<八大排序> __插入排序 |希爾排序 |選擇排序 |堆排序 |快速排序 |歸并排序(C語(yǔ)言實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)__<八大排序> __插入排序 |希爾排序 |選擇排序 |堆排序 |快速排序 |歸并排序(C語(yǔ)言實(shí)現(xiàn))

    目錄 插入排序? 希爾排序 選擇排序 堆排序 冒泡排序 快速排序 hoare法 挖坑法 前后指針法 快排特性總結(jié) 三數(shù)取中優(yōu)化 小區(qū)間優(yōu)化 快排非遞歸 歸并排序 歸并排序非遞歸 計(jì)數(shù)排序 總結(jié) OJ測(cè)試 1、元素集合越接近有序,直接插入排序算法的時(shí)間效率越高 2、時(shí)間復(fù)雜度:O(N^2

    2023年04月09日
    瀏覽(100)
  • 第五章 數(shù)據(jù)結(jié)構(gòu)與算法——八大排序

    第五章 數(shù)據(jù)結(jié)構(gòu)與算法——八大排序

    目錄 一、排序的概念及其運(yùn)用 二、八大排序的原理及其實(shí)現(xiàn)(升序?yàn)槔?(一)、直接插入排序 (二)、希爾排序(也叫縮小增量排序)(重要) 1.原理: 2.該排序一般分為兩個(gè)步驟: 3.預(yù)排序過(guò)程: 4.預(yù)排序的意義(升序?yàn)槔?5.希爾排序的特點(diǎn): 6.希爾排序代碼實(shí)現(xiàn)

    2024年02月19日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】八大排序算法+時(shí)空復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)初階】八大排序算法+時(shí)空復(fù)雜度

    學(xué)會(huì)控制自己是人生的必修課 1.直接插入排序思想: 假設(shè)現(xiàn)在已經(jīng)有一個(gè)有序序列,如果有一個(gè)數(shù)字插入到這段序列的末尾,我們會(huì)選擇拿這個(gè)數(shù)和它前面的每個(gè)數(shù)字都比較一遍,如果前面的數(shù)字比他大,那我們就讓前面的數(shù)字賦值到這個(gè)被插入的數(shù)字位置,依次與前面的數(shù)

    2024年02月01日
    瀏覽(32)
  • 扎實(shí)打牢數(shù)據(jù)結(jié)構(gòu)算法根基,從此不怕算法面試系列之010 week02 01-01 最簡(jiǎn)單的排序算法-選擇排序法的設(shè)計(jì)思想

    接下類,我們學(xué)習(xí)另外一類非?;A(chǔ)的算法,即排序算法。 排序算法是計(jì)算機(jī)科學(xué)領(lǐng)域研究的非常深入的一類算法,排序這個(gè)動(dòng)作本身也是非常重要的, 很多時(shí)候面對(duì)無(wú)需的數(shù)據(jù),首先需要做的就是對(duì)他們進(jìn)行排序。 排序算法——目的:讓數(shù)據(jù)有序。 排序算法——種類:種

    2023年04月21日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)】八大排序算法(內(nèi)含思維導(dǎo)圖和畫圖分析)

    【數(shù)據(jù)結(jié)構(gòu)】八大排序算法(內(nèi)含思維導(dǎo)圖和畫圖分析)

    作者主頁(yè): paper jie_博客 本文作者:大家好,我是paper jie,感謝你閱讀本文,歡迎一建三連哦。 本文錄入于《JAVA數(shù)據(jù)結(jié)構(gòu)》專欄,本專欄是針對(duì)于大學(xué)生,編程小白精心打造的。筆者用重金(時(shí)間和精力)打造,將javaSE基礎(chǔ)知識(shí)一網(wǎng)打盡,希望可以幫到讀者們哦。 其他專欄:

    2024年02月08日
    瀏覽(26)
  • 手把手教你 ,帶你徹底掌握八大排序算法【數(shù)據(jù)結(jié)構(gòu)】

    手把手教你 ,帶你徹底掌握八大排序算法【數(shù)據(jù)結(jié)構(gòu)】

    直接插入排序是一種簡(jiǎn)單的插入排序法,其基本思想:是把待排序的記錄按其關(guān)鍵碼值的大小逐個(gè)插入到一個(gè)已經(jīng)排好序的有序序列中,直到所有的記錄插入完為止,得到一個(gè)新的有序序列 可以理解為一遍摸撲克牌,一邊進(jìn)行排序 在待排序的元素中,假設(shè)前面n-1(其中n=2)個(gè)數(shù)

    2024年02月02日
    瀏覽(106)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包