欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1.冒泡排序

冒泡排序?qū)⒁粋€(gè)列表中的兩個(gè)元素進(jìn)行比較,并將最小的元素交換到頂部。兩個(gè)元素中較小的會(huì)冒到頂部,而較大的會(huì)沉到底部,該過程將被重復(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);//對(duì)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]對(duì)調(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ù)對(duì)調(diào),那么最小的數(shù)就在a[0]中了,也就是在最前面了。

如果現(xiàn)在重復(fù)此算法,但每重復(fù)一次, 進(jìn)行比較的數(shù)列范圍就向后移動(dòng)一個(gè)位置,即第二遍比較時(shí)范圍就從第2個(gè)數(shù)一直到第 n個(gè)數(shù),在此范圍內(nèi)找最小的數(shù)的位置p,然后把a(bǔ)[p]與a[2]對(duì)調(diào),這樣從第2個(gè)數(shù)開始到第n個(gè)數(shù)中,最小數(shù)就在a[2]中了,第三遍就從第個(gè)數(shù)到第n 個(gè)數(shù)中去找最小的數(shù),再把a(bǔ)[p]與a[3]對(duì)調(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.冒泡排序每一輪比較后,位置不對(duì)都需要換位置,選擇排序每一輪比較都只需要換一次位置;

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會(huì)和2交換,那么原序列中2個(gè)5的相對(duì)位置前后順序就破壞了)。

總結(jié)

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

相關(guān)文章

  • C++實(shí)現(xiàn)讀寫ini配置文件的示例代碼

    C++實(shí)現(xiàn)讀寫ini配置文件的示例代碼

    配置文件的讀取是每個(gè)程序必備的功能,配置文件的格式多種多樣,例如:ini格式、json格式、xml格式等。其中屬ini格式最為簡單,且應(yīng)用廣泛。本文和大家分享了C++讀寫ini配置文件的方法,需要的可以參考一下
    2023-05-05
  • C++實(shí)現(xiàn)銀行排隊(duì)系統(tǒng)

    C++實(shí)現(xiàn)銀行排隊(duì)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)銀行排隊(duì)系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C語言五子棋小游戲?qū)崿F(xiàn)代碼

    C語言五子棋小游戲?qū)崿F(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C語言五子棋小游戲?qū)崿F(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++數(shù)組指針和二維數(shù)組詳情

    C++數(shù)組指針和二維數(shù)組詳情

    這篇文章主要介紹了C++數(shù)組指針和二維數(shù)組,指針數(shù)組和二維數(shù)組在應(yīng)用中常用于函數(shù)傳參,下面我們就來看看指針數(shù)組和二維數(shù)組在應(yīng)用中的具體使用吧,需要的朋友可以參考一下
    2021-10-10
  • C語言中函數(shù)參數(shù)的入棧順序詳解及實(shí)例

    C語言中函數(shù)參數(shù)的入棧順序詳解及實(shí)例

    這篇文章主要介紹了C語言中函數(shù)參數(shù)的入棧順序詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C語言動(dòng)態(tài)內(nèi)存管理的原理及實(shí)現(xiàn)方法

    C語言動(dòng)態(tài)內(nèi)存管理的原理及實(shí)現(xiàn)方法

    C語言動(dòng)態(tài)內(nèi)存管理的原理是通過 malloc() 函數(shù)申請(qǐng)一塊連續(xù)的內(nèi)存空間,并返回其地址,通過 free() 函數(shù)釋放該內(nèi)存空間。實(shí)現(xiàn)方法是通過在程序運(yùn)行時(shí)動(dòng)態(tài)地管理內(nèi)存,即在需要內(nèi)存時(shí)申請(qǐng),不需要時(shí)釋放,避免了靜態(tài)內(nèi)存分配的浪費(fèi)和不足
    2023-04-04
  • C/C++中比較字符串的方法詳解

    C/C++中比較字符串的方法詳解

    這篇文章主要介紹了C/C++中比較字符串的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 使用C語言實(shí)現(xiàn)本地socke通訊的方法

    使用C語言實(shí)現(xiàn)本地socke通訊的方法

    這篇文章主要介紹了?使用C語言實(shí)現(xiàn)本地socke通訊,代碼分為服務(wù)器代碼和客戶端代碼,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Linux下C語言的幾道經(jīng)典面試題小結(jié)(分享)

    Linux下C語言的幾道經(jīng)典面試題小結(jié)(分享)

    下面小編就為大家?guī)硪黄狶inux下C語言的幾道經(jīng)典面試題小結(jié)(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • C++入門指南之貪吃蛇游戲的實(shí)現(xiàn)

    C++入門指南之貪吃蛇游戲的實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于C++入門指南之貪吃蛇游戲?qū)崿F(xiàn)的相關(guān)資料,文章通過示例代碼介紹的非常詳細(xì),可以讓大家能短時(shí)間內(nèi)寫出一個(gè)貪吃蛇,需要的朋友可以參考下
    2021-10-10

最新評(píng)論