本文目錄一覽:
關於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-hk/n/141167.html