c語言起泡方法,c語言冒泡法詳解

本文目錄一覽:

c語言中起泡法和選擇法有什麼不同,急!,謝謝!

 

兩者最大的區別在於演算法本身。

起泡法(冒泡法)是相鄰元素兩兩比較,每趟將最值沉底即可確定一個數在結果的位置,確定元素位置的順序是從後往前,其餘元素可能作相對位置的調整。可以進行升序或降序排序。

選擇法是每趟是選出一個最值確定其在結果序列中的位置,確定元素的位置是從前往後,而每趟最多進行一次交換,其餘元素的相對位置不變。可進行降序排序或升序排序。

    一、冒泡法(起泡法)

1、演算法示例:用起泡法對10個整數按升序排序。

2、演算法分析:如果有n個數,則要進行n-1趟比較。在第1趟比較中要進行n-1次相鄰元素的兩兩比較,在第j趟比較中要進行n-j次兩兩比較。比較的順序從前往後,經過一趟比較後,將最值沉底(換到最後一個元素位置),最大值沉底為升序,最小值沉底為降序。

3、演算法原碼

   #include stdio.h

int main()

{

int a[10],i,j,t;

printf(“Please input 10 numbers: “);

/*輸入源數據*/

for(i=0;i10;i++)

scanf(“%d”,a[i]);

/*排序*/

for(j=0;j9;j++)          /*外循環控制排序趟數,n個數排n-1趟*/

for(i=0;i9-j;i++)    /*內循環每趟比較的次數,第j趟比較n-j次*/

if(a[i]a[i+1])    /*相鄰元素比較,逆序則交換*/

{ t=a[i];

a[i]=a[i+1];

a[i+1]=t;

}

/*輸出排序結果*/

printf(“The sorted numbers: “);

for(i=0;i10;i++)

printf(“%d   “,a[i]);

printf(“\n”);

return 0;

}

二、選擇法

1、演算法示例要求:用選擇法對10個整數按降序排序。

2、演算法分析:每趟選出一個最值和無序序列的第一個數交換,n個數共選n-1趟。第i趟假設i為最值下標,然後將最值和i+1至最後一個數比較,找出最值的下標,若最值下標不為初設值,則將最值元素和下標為i的元素交換。

3、演算法源代碼:

 #include stdio.h

int main()

{

int a[10],i,j,k,t,n=10;

printf(“Please input 10 numbers:”);

for(i=0;i10;i++)

scanf(“%d”,a[i]);

for(i=0;in-1;i++)   /*外循環控制趟數,n個數選n-1趟*/

{

k=i;             /*假設當前趟的第一個數為最值,記在k中 */

for(j=i+1;jn;j++)  /*從下一個數到最後一個數之間找最值*/

if(a[k]a[j])     /*若其後有比最值更大的*/

k=j;         /*則將其下標記在k中*/

if(k!=i)        /*若k不為最初的i值,說明在其後找到比其更大的數*/

{  t=a[k];  a[k]=a[i];  a[i]=t;  } /*則交換最值和當前序列的第一

個數*/

}

printf(“The sorted numbers: “);

for(i=0;i10;i++)

printf(“%d   “,a[i]);

printf(“\n”);

}

C語言中冒泡排序法(又稱起泡排序法)得具體程序

冒泡法我是這樣理解的,便於掌握和記憶。首先冒泡是n長度的數組開始的兩位開始,逐位雙雙比較一直到最後兩個,所以最外循環比較了n-1次。第一個數比較了以後就不比了,從第二個開始,一直比較到數組末尾,於是內循環的起始位置不同,每次都是外側i的值加0,也就是i。但結束的限制和外層循環是相同的。於是寫法為for (i=0;in-1;i++)

{

for(j=i;jn-1;j++)

C語言 起泡法

本程序是由小到大排序;

語句:

for (j=1;j=9;j++)

for(i=1; i=10-j; i++)

是先內循環再外循環;j是為循環語句for(i=1; i=10-j; i++)判斷數組a[i]與a[i+1]大小時用的輔助「標記」。當j=1時,for(i=1; i=10-j; i++)語句中的i循環9次(因為10-j=9),把數組a[i]最大的值賦給a[10];

當j=2時,for(i=1; i=10-j; i++)語句中的i循環8次,把第二個最大值賦給a[9];

當j=9時,for(i=1; i=10-j; i++)語句中的i循環1次,把最小值賦給a[1],第二個最小值賦給a[2]。

關於c語言的起泡法

從左到右倆倆比較 大的數放在右邊

75830

當前的第一個數和第二個數比較 7和5比較7大 交換7在右 57830

當前的第二個數和第三個數比較 7和8比較8大 不變8在右 57830

當前的第三個數和第四個數比較 8和3比較8大 交換8在右 57380

當前的第四個數和第五個數比較 8和0比較8大 交換8在右 57308

以上是一次內層的for循環也就是第一輪 結果是最大的數8到了最右面

除最大數8外的其他元素相對位置發生了改變

外層for循環第二輪 53078 7右2 530三個數相對位置不變

第三輪 30578 5右3 30倆數相對位置不變

第四輪 03578 3右4

在c語言中何為起泡法,請高手給詳細解釋一下

你說的可能是冒泡排序。這種演算法是很簡單的,他就是先處第一個數與其它數比較,小的排在前面,一輪下來最小的數就找到了,然後再用第二個數與剩餘的數比較,以此類推。(其中要用到遞歸的思想)

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/256826.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:42
下一篇 2024-12-15 12:42

相關推薦

  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 用不同的方法求素數

    素數是指只能被1和自身整除的正整數,如2、3、5、7、11、13等。素數在密碼學、計算機科學、數學、物理等領域都有著廣泛的應用。本文將介紹幾種常見的求素數的方法,包括暴力枚舉法、埃…

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進位的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進位。 一、AES加密介紹 AE…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python學習筆記:去除字元串最後一個字元的方法

    本文將從多個方面詳細闡述如何通過Python去除字元串最後一個字元,包括使用切片、pop()、刪除、替換等方法來實現。 一、字元串切片 在Python中,可以通過字元串切片的方式來…

    編程 2025-04-29

發表回復

登錄後才能評論