最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c語言冒泡排序和選擇排序的使用代碼

 更新時(shí)間:2022年04月01日 10:20:06   作者:路在何方い  
算法中排序是十分重要的,而每一個(gè)學(xué)習(xí)計(jì)算機(jī)的都會在初期的時(shí)候接觸到這種排序,下面這篇文章主要給大家介紹了關(guān)于c語言冒泡排序和選擇排序使用的相關(guān)資料,需要的朋友可以參考下

1.冒泡排序

冒泡排序?qū)⒁粋€(gè)列表中的兩個(gè)元素進(jìn)行比較,并將最小的元素交換到頂部。兩個(gè)元素中較小的會冒到頂部,而較大的會沉到底部,該過程將被重復(fù)執(zhí)行,直到所有元素都被排序。

冒泡排序示意圖

以如圖所示的冒泡排序?yàn)槔?,每次比較相鄰的兩個(gè)值,值小的交換到前面,每輪結(jié)束后值最大的數(shù)交換到了最后。第一輪需要比較4次;第二輪需要比較3次;第三輪需要比較2次;第四輪需要比較1次。

那么如何用二重循環(huán)將5個(gè)數(shù)排序呢?5個(gè)數(shù)存放在一維數(shù)組中,外層循環(huán)控制比較多少輪,循環(huán)變量i;內(nèi)層控制每輪比較多少次,循環(huán)變量就,如下圖所示:

代碼如下:

#include <stdio.h>
#define NUM 5
void arrsort(int[],int);
void arrout(int[],int);
 main(){
	 int a[NUM]={16,25,9,90,23};
	 arrout(a,NUM);//輸出a數(shù)組中原始數(shù)據(jù)
	 arrsort(a,NUM);//對a數(shù)組中的數(shù)進(jìn)行排序
     arrout(a,NUM);//輸出排序后a數(shù)組中的數(shù)據(jù)
}
void arrsort(int a[],int n){
	for(int i=0;i<n-1;i++){
		for(int j=0;j<n-1-i;j++){
			if(a[j]>a[j+1]){ 
			  int temp =a[j+1];
			  a[j+1] = a[j];
			  a[j] = temp;
			}
		}
	}
	
}
void arrout(int a[],int n){
   int i;
   for(i=0;i<n;i++){
    printf("%3d",a[i]);
   }
   printf("\n");
 }

輸出結(jié)果為:

2.選擇排序

在介紹選擇排序法之前,憑介紹一種把最小的數(shù)放在第一個(gè)位置上的算法,當(dāng)然也可以用前面所講的冒泡排序法,現(xiàn)在我們改用一種新的算法: 其指導(dǎo)思想是先并不急于調(diào)換位置,先從a[0]開始逐個(gè)檢查,看哪個(gè)數(shù)最小,就記下該數(shù)所在的位置p,等一躺掃描完畢,再把a(bǔ)[p]和a[0]對調(diào),這時(shí)a[0] a[9]最小的數(shù)據(jù)就換到了最前面的位置。算法的步驟如下。

(1)先假設(shè)a[0]的數(shù)最小,記下此時(shí)的位置p。

(2)依次把a(bǔ)[p]和a[i](從2變化到9)進(jìn)行比較,每次比較時(shí),若a[j]的數(shù)比a[p]中的數(shù)小,則把i的值賦給p,使p總是指向當(dāng)前所掃描過的最小數(shù)的位置,也就是說a[p]總是等于所有掃描過的數(shù)中最小的那個(gè)數(shù)。在依次一一比較后,p就指向 10個(gè)數(shù)中 最小的數(shù)所在位置,即a[p]就是10 個(gè)數(shù)中最小的那個(gè)數(shù)。

(3)把a(bǔ)[p]和a[0]的數(shù)對調(diào),那么最小的數(shù)就在a[0]中了,也就是在最前面了。

如果現(xiàn)在重復(fù)此算法,但每重復(fù)一次, 進(jìn)行比較的數(shù)列范圍就向后移動一個(gè)位置,即第二遍比較時(shí)范圍就從第2個(gè)數(shù)一直到第 n個(gè)數(shù),在此范圍內(nèi)找最小的數(shù)的位置p,然后把a(bǔ)[p]與a[2]對調(diào),這樣從第2個(gè)數(shù)開始到第n個(gè)數(shù)中,最小數(shù)就在a[2]中了,第三遍就從第個(gè)數(shù)到第n 個(gè)數(shù)中去找最小的數(shù),再把a(bǔ)[p]與a[3]對調(diào)..此過程重復(fù)n-1次后,就把a(bǔ)組中n個(gè)數(shù)按從小到大的順序排好了。這種排序的方法就是選擇排序法。

下面我們定義一個(gè)臨時(shí)變量temp代替a[p],進(jìn)行排序。

選擇排序修改為:從鍵盤輸入的十個(gè)整數(shù)按升序排列輸出

#include <stdio.h>
void main(){
  int i,j,k;
  int a[10];
  for(k=0;k<10;k++){
     scanf("%d",&a[k]);
  }
  for(i=0;i<9;i++){
	  for(j=i+1;j<10;j++){
		 
		  if(a[i]>a[j]){ 
		   int temp = a[j];
		   a[j] = a[i];
	        a[i] = temp;
		  }
	  }
	  
 
  }
  for(i=0;i<10;i++){
    printf("%d ",a[i]);
  }
}

區(qū)別

1.冒泡排序是比較相鄰位置的兩個(gè)數(shù),而選擇排序是按順序比較,找最大值或者最小值;

2.冒泡排序每一輪比較后,位置不對都需要換位置,選擇排序每一輪比較都只需要換一次位置;

3.冒泡排序是通過數(shù)去找位置,選擇排序是給定位置去找數(shù);

冒泡排序優(yōu)缺點(diǎn)

1.優(yōu)點(diǎn):比較簡單,空間復(fù)雜度較低,是穩(wěn)定的;                 

 2.缺點(diǎn):時(shí)間復(fù)雜度太高,效率慢;

選擇排序優(yōu)缺點(diǎn)

1.優(yōu)點(diǎn):一輪比較只需要換一次位置;

2.缺點(diǎn):效率慢,不穩(wěn)定(舉個(gè)例子5,8,5,2,9   我們知道第一遍選擇第一個(gè)元素5會和2交換,那么原序列中2個(gè)5的相對位置前后順序就破壞了)。

總結(jié)

到此這篇關(guān)于c語言冒泡排序和選擇排序使用的文章就介紹到這了,更多相關(guān)c語言冒泡排序和選擇排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)掃雷經(jīng)典小游戲

    C++實(shí)現(xiàn)掃雷經(jīng)典小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)掃雷經(jīng)典小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++設(shè)計(jì)模式之裝飾模式

    C++設(shè)計(jì)模式之裝飾模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之裝飾模式,裝飾模式能夠?qū)崿F(xiàn)動態(tài)的為對象添加功能,是從一個(gè)對象外部來給對象添加功能,需要的朋友可以參考下
    2014-10-10
  • 詳解C語言之文件操作下)

    詳解C語言之文件操作下)

    這篇文章主要介紹了關(guān)于C語言文件操作方法的相關(guān)資料,小編覺得這篇文章寫的還不錯(cuò),需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-11-11
  • C語言判斷字符串是否以str2開頭代碼

    C語言判斷字符串是否以str2開頭代碼

    這里給大家分享的是一個(gè)使用C語言實(shí)現(xiàn)的判斷字符串中是否以某字符開頭或者結(jié)尾的代碼,非常的簡單實(shí)用,希望大家能夠喜歡
    2017-05-05
  • C語言打印楊輝三角形的示例代碼

    C語言打印楊輝三角形的示例代碼

    楊輝三角形,又稱帕斯卡三角形、賈憲三角形、海亞姆三角形,它的排列形如三角形。本文將為大家介紹通過C語言實(shí)現(xiàn)打印楊輝三角形的示例代碼,需要的可以參考一下
    2022-02-02
  • C++實(shí)現(xiàn)大數(shù)乘法算法代碼

    C++實(shí)現(xiàn)大數(shù)乘法算法代碼

    這篇文章主要介紹了C++實(shí)現(xiàn)大數(shù)乘法算法代碼的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • C++實(shí)現(xiàn)鏈表版本通訊錄

    C++實(shí)現(xiàn)鏈表版本通訊錄

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)鏈表版本通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++超詳細(xì)講解智能指針

    C++超詳細(xì)講解智能指針

    為了解決內(nèi)存泄漏的問題,C++中提出了智能指針。內(nèi)存泄漏的產(chǎn)生原因有很多,即使我們正確的使用malloc和free關(guān)鍵字也有可能產(chǎn)生內(nèi)存泄漏,如在malloc和free之間如果存在拋異常,那也會產(chǎn)生內(nèi)存泄漏。這種問題被稱為異常安全
    2022-06-06
  • C字符串操作函數(shù)實(shí)現(xiàn)方法小結(jié)

    C字符串操作函數(shù)實(shí)現(xiàn)方法小結(jié)

    這篇文章主要介紹了C字符串操作函數(shù)實(shí)現(xiàn)方法,實(shí)例總結(jié)了C語言字符串操作的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C語言實(shí)現(xiàn)外賣管理系統(tǒng)

    C語言實(shí)現(xiàn)外賣管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)外賣管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評論

湘西| 义马市| 如皋市| 永川市| 定南县| 枣庄市| 陵川县| 南投市| 鄱阳县| 兴和县| 南和县| 咸丰县| 石嘴山市| 龙南县| 鄂伦春自治旗| 米脂县| 广河县| 南通市| 修武县| 通州市| 沙洋县| 福海县| 应城市| 屏山县| 咸丰县| 湛江市| 岑巩县| 喀喇| 哈密市| 盐津县| 邓州市| 南江县| 个旧市| 彭泽县| 青州市| 德钦县| 易门县| 湟源县| 东阿县| 博客| 修水县|