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

C語言入門:冒泡法排序、交換法排序和選擇法排序算法的詳解(代碼分析)

這篇具有很好參考價值的文章主要介紹了C語言入門:冒泡法排序、交換法排序和選擇法排序算法的詳解(代碼分析)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?冒泡法排序:顧名思義,小的數(shù)據(jù)就好像水中的氣泡一樣總是逐漸往上升, 大的數(shù)據(jù)就像石塊一樣往下沉,因此稱為冒泡法排序法。

假如有n個數(shù)字,則需要進行n-1輪?

第一輪結(jié)果:最大的數(shù),被放在了最后一位

交換法排序,從鍵盤輸入6個數(shù),要求按升序排序,輸出排序結(jié)果。,c語言,排序算法,算法

?第二輪:元素 ‘8’ 已經(jīng)拍好了順序,所以只用將前4個元素進行排序

交換法排序,從鍵盤輸入6個數(shù),要求按升序排序,輸出排序結(jié)果。,c語言,排序算法,算法

?第三輪:只用將前3個元素排序即可

交換法排序,從鍵盤輸入6個數(shù),要求按升序排序,輸出排序結(jié)果。,c語言,排序算法,算法

?第四輪:只用將前2個元素比較即可

交換法排序,從鍵盤輸入6個數(shù),要求按升序排序,輸出排序結(jié)果。,c語言,排序算法,算法

?第五輪:只剩下一個元素,直接放在首位,它一定是最小的

交換法排序,從鍵盤輸入6個數(shù),要求按升序排序,輸出排序結(jié)果。,c語言,排序算法,算法

?以上就是冒泡排序的步驟

代碼如下:

/*冒泡法排序:字面意思為小的數(shù)據(jù)就好像水中的氣泡一樣總是逐漸往上升,
大的數(shù)據(jù)就像石塊一樣往下沉,因此稱為冒泡法排序法。
第一輪從a[0]到a[5]依次把兩個相鄰的元素兩兩比較;每次比較后,順序不對,
則交換兩個元素的值,否則不交換。*/

//利用冒泡排序法,對輸入的數(shù)據(jù)安升序排序
#include<stdio.h>
int main() {
	int i, j, a[100], t;//數(shù)組元素的最大容量為100
	int n;
	printf("請輸入要排序的元素個數(shù):");
	scanf("%d", &n);
	printf("請輸入要排序的元素:");
	for (i = 0; i < n ; i++) {
		scanf("%d", &a[i]);//將數(shù)據(jù)放入數(shù)組中
	}
	/*核心部分:i屬于[0,n-1)即N-1次循環(huán);j屬于[0,n-1-i)*/
	for (i = 0; i < n-1 ; i++) {//這里可以寫成:i<n;它表示意思是,進行n輪,最后一個沒排的元素由于不滿足j<n-i-1,因此不用比較,因為它一定是最小的
		for (j = 0; j < n - i - 1; j++) {//i<n-1;它的意思是:進行n-1輪,最后一個元素與緊鄰右邊的元素再進行一次比較,這個過程可省略,因為它在上一輪結(jié)束后,已經(jīng)是比右邊的小了
			if (a[j] > a[j + 1]) {
				t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}
	}
	printf("排序之后為:");
	for (j = 0; j < n; j++) 
		printf("%-3d", a[j]);
	return 0;
}

?運行結(jié)果為:

交換法排序,從鍵盤輸入6個數(shù),要求按升序排序,輸出排序結(jié)果。,c語言,排序算法,算法


?再來看交換法:


交換法排序:?交換法排序:

??????第一輪用a[0]依次與a[1],a[2],....進行比較,若次序不對就交換,否則不交換,本輪結(jié)束后,a[0]就是最小數(shù)。 ????????第二輪用a[1]與依次與a[2],a[3],.....交換,處理方法與第一輪相同。重復(fù)上述過程,至第N-1輪(N為排序的個數(shù)),采用二重 循環(huán),外循環(huán)變量i從0循環(huán)到N-2,共循環(huán)N-1次;內(nèi)循環(huán)變量j從i+1開始循環(huán)到N-1?

?代碼如下:

/*交換法排序:第一輪用a[0]依次與a[1],a[2],....進行比較,若次序不對就交換,否則不交換,本輪結(jié)束后,a[0]就是最小數(shù)。
第二輪用a[1]與依次與a[2],a[3],.....交換,處理方法與第一輪相同。重復(fù)上述過程,至第N-1輪(N為排序的個數(shù)),采用二重
循環(huán),外循環(huán)變量i從0循環(huán)到8,共循環(huán)9次;內(nèi)循環(huán)變量j從i+1開始循環(huán)到N-1*/

//從鍵盤輸入10個數(shù),按照升序排序,并輸出排序結(jié)果。
#include<stdio.h>
int main() {
	int n;
	int i, j, t, a[100];
	printf("請輸入要排序的元素個數(shù):");
	scanf("%d", &n);
	printf("請輸入要排序的元素:");
	for (j = 0; j < n; j++) {
		scanf("%d", &a[j]);
	}
	/*核心部分:i屬于[0,n-1);j屬于[i+1,n)*/
	for (i = 0; i < n-1; i++) {
		for (j = i + 1; j < n; j++) {
			if (a[i] > a[j]) {
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}
	}
	printf("排序后為:");
	for (j = 0; j < n; j++) {
		printf("%-2d", a[j]);
	}
	return 0;
}

?運行結(jié)果為:

交換法排序,從鍵盤輸入6個數(shù),要求按升序排序,輸出排序結(jié)果。,c語言,排序算法,算法

?

選擇法排序:(選擇法排序是交換法排序的改進版,兩個核心循環(huán)沒有發(fā)生變化)

????????是交換法排序的改進方法,在交換法中,用于排序的雙重循環(huán)中,每當(dāng)a[i]>a[j]時,就交換a[i],a[j], ????????實際上不需要每次都交換,只要增設(shè)一個變量k,用于記錄每次較小數(shù)的下標(biāo),只需要在本輪比較結(jié)束后,交換a[i],a[k]即可。

/*選擇法排序*/
#include<stdio.h>
int main() {
	int i, j, t, k, a[100];
	int n;
	printf("請輸入要排序的元素個數(shù):");
	scanf("%d", &n);
	printf("請輸入要排序的元素:");
	for (i = 0; i < n; i++) {
		scanf("%d", &a[i]);
	}
	/*核心*/
	for (i = 0; i < n - 1; i++) {
		k = i;
		for (j = i + 1; j < n; j++) {
			if (a[k] > a[j]) {
				k = j;
			}
		}if (i != k) {		//即a[i]不是最小的,(已經(jīng)執(zhí)行過k=j;)將a[i]與后面最小的元素換位置
			t = a[i];
			a[i] = a[k];
			a[k] = t;
		}
	}printf("排序后的數(shù)組為:");
	for (i = 0; i < n; i++) {
		printf("%-3d", a[i]);
	}
	return 0;
}//這種方法比交換法更簡便,交換次數(shù)更少

交換法排序,從鍵盤輸入6個數(shù),要求按升序排序,輸出排序結(jié)果。,c語言,排序算法,算法

?以上就是最基本的:三種排序文章來源地址http://www.zghlxwxcb.cn/news/detail-767966.html

到了這里,關(guān)于C語言入門:冒泡法排序、交換法排序和選擇法排序算法的詳解(代碼分析)的文章就介紹完了。如果您還想了解更多內(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)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包