冒泡原理c語言,c語言程序設計冒泡法

本文目錄一覽:

關於C語言冒泡演算法的詳解

冒泡法又稱起泡法,屬於交換排序.假設待排序數組a的長度是n,排序過程如下:

1)令i=0

2)另j=n-1(從最後一個元素開始)

3)比較a[j-1]與a[j],若a[j-1]a[j],則把它們交換

4)若ji,則令j–,轉到3),否則轉到5)

5)若in-1,則令i++,轉到2),否則轉到6)

6)完成排序

C語言冒泡排序原理

for(i=0;iN;i++)//起什麼作用

{

for(j=0;jN-i-1;j++)// 不明白N-i-1的原理

if(a[j]a[j+1])//起什麼作用

{

//是怎麼交換2個值的?

temp=a[j+1];

a[j+1]=a[j];

a[j]=temp;

}

}

這是冒泡的核心,感覺寫法跟java差不多,不過這樣寫不太直觀。

首先第一句是從第一個數起比較

N-i-1指的是每循環一輪,最大的數自然在最後。所以每次都要減i

而減1是因為它後面有一個當前數和後面的數對比。

if(a[j]a[j+1])

指的是如果後面的數比前面的數大。則返回真,執行下面的語句。

否則不執行。

temp=a[j+1];

a[j+1]=a[j];

a[j]=temp;

如果後面的數大,那麼就執行。具體的邏輯。

想將A和B的值互換,那麼。

temp = A

A=B

B=temp

如果直接A=B,A原來的值就會不見了。

c語言中冒泡排序的實現原理是什麼?

冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在第二趟:仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重複以上過程,直至最終完成排序。

由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。

用二重循環實現,外循環變數設為i,內循環變數設為j。外循環重複9次,內循環依次重複9,8,…,1次。每次進行比較的兩個元素都是與內循環j有關的,它們可以分別用a[j]和a[j+1]標識,i的值依次為1,2,…,9,對於每一個i,

j的值依次為1,2,…10-i

求解c語言冒泡排序法,兩個for循環里到底是什麼

這個應該到網上去搜索啊,不該在這問。

冒泡排序的原理就是:(升序)

 依次比較相鄰的2個數,把較大的值放在後面,使最後一個數變成數組中的最大值。

 循環這個過程,直到所有的數據都按這個規則排列好。此時,排序完畢。

舉例:3,2,5,7,1 (升序)

 1.  3與2比較,交換  ,數組:2,3,5,7,1

 2.  3與5比較, 不交換, 數組: 2,3,5,7,1

 3.  5與7比較, 不交換, 數組: 2,3,5,7,1

 4.  7與1比較, 交換  , 數組: 2,3,5,1,7

 第一次遍歷比較完成,此時,最後一個數據就是最大值了。

 此後的比較,只要比較2,3,5,1即可,因為最後一個已經是最大的了。

 然後再按這個規則循環。   

 

 代碼的話:

 #include stdio.h

 int main() {

   int i, j, t;

   int a[] = {3,2,5,7,1};

   int len = 5; //數組長度5

   //外層循環,就是按照這個演算法:控制需要最多幾次循環才能排序完畢

   for (i=0;ilen-1;i++) { //注意,只要比較len-1次循環

     //內層循環,就相當於上面1-4步,數據兩兩相比較

     for (j=0;jlen-i-1;j++) { //注意,比較次數是:len-i-1次

       if (a[j]a[j+1]) {//相鄰2個做比較

         t = a[j];a[j]=a[j+1];a[j+1]=t; //交換

       }

     }

   }

 }

 

 此即冒泡法排序。當然,冒泡還有一些變種,如:增加標誌,如果某次循環中,沒發生一次交換,則說明已經排序完畢。則結束循環,這樣可以加快速度。

C語言:編寫一個程序用冒泡排序實現升序排列

程序如下:

#include stdio.h

int main ()

{

int a[10];

int i, j, t;

printf (“請輸入十個數:\n”);

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

{

printf (“a[%d]=”, i+1);

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

}

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

for (i = 0; i 9 – j; i++)

if (a[i] a[i+1])

{

t = a[i];

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

a[i+1] = t;

}

printf (“由小到大的順序為:\n”);

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

{

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

}

printf (“\n”);

return 0;

}

運行結果

請輸入十個數:

a[1]=7

a[2]=8

a[3]=9

a[4]=6

a[5]=5

a[6]=4

a[7]=1

a[8]=2

a[9]=3

a[10]=99

由小到大的順序為:

1,2,3,4,5,6,7,8,9,99。

冒泡排序演算法的原理如下:

1、比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

2、對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

3、針對所有的元素重複以上的步驟,除了最後一個。

4、持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

擴展資料:

冒泡排序的思想:

首先,從表頭開始往後掃描數組,在掃描過程中逐對比較相領兩個元素的大小。若相鄰兩個元素中,前面的元素大於後面的元素,則將它們互換, 稱之為清去了一個逆序。

在掃描過程中,不斷地將兩相鄰元素中的大者往後移動,最後就將數組中的最大者換到了表的最後,這正是數組中最大元素應有的位置。

然後,在剩下的數組元素中(n-1個元素)重複上面的過程,將次小元素放到倒數第2個位置。不斷重複上述過程,直到剩下的數組元素為0為止,此時的數組就變為了有序。

假設數組元素的個數為西,在最壞情況下需要的比較總次數為: (n-1)+(n- 2)…+2+1)- n(n-1)/2。

參考資料來源:百度百科-冒泡排序

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
INNP的頭像INNP
上一篇 2024-10-04 00:24
下一篇 2024-10-04 00:24

相關推薦

  • AES加密解密演算法的C語言實現

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

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

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

    編程 2025-04-29
  • Harris角點檢測演算法原理與實現

    本文將從多個方面對Harris角點檢測演算法進行詳細的闡述,包括演算法原理、實現步驟、代碼實現等。 一、Harris角點檢測演算法原理 Harris角點檢測演算法是一種經典的計算機視覺演算法…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • 瘦臉演算法 Python 原理與實現

    本文將從多個方面詳細闡述瘦臉演算法 Python 實現的原理和方法,包括該演算法的意義、流程、代碼實現、優化等內容。 一、演算法意義 隨著科技的發展,瘦臉演算法已經成為了人們修圖中不可缺少…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • 神經網路BP演算法原理

    本文將從多個方面對神經網路BP演算法原理進行詳細闡述,並給出完整的代碼示例。 一、BP演算法簡介 BP演算法是一種常用的神經網路訓練演算法,其全稱為反向傳播演算法。BP演算法的基本思想是通過正…

    編程 2025-04-29
  • 學堂雲Python語言程序設計答案

    學堂雲Python語言程序設計是一門重要的計算機專業課程。它涵蓋了Python語言及其應用,包括基礎語法、函數、文件處理、數據結構、圖形界面和網路編程等內容。在學習中,我們經常會需…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28

發表回復

登錄後才能評論