Ⅰ c語言冒泡排序法是怎麼排序的
C語言冒泡排序法的排序規則:
將被排序的記錄數組R[1..n]垂直排列,每個記錄R看作是重量為R.key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R:凡掃描到違反本原則的輕氣泡,就使其向上"飄浮"。如此反復進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。
初始 R[1..n]為無序區。
第一趟掃描 從無序區底部向上依次比較相鄰的兩個氣泡的重量,若發現輕者在下、重者在上,則交換二者的位置。
即依次比較(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);對於每對氣泡(R[j+1],R[j]),若R[j+1].key<R[j].key,則交換R[j+1]和R[j]的內容。 第一趟掃描完畢時,"最輕"的氣泡就飄浮到該區間的頂部,即關鍵字最小的記錄被放在最高位置R[1]上。
第二趟掃描 掃描R[2..n]。
掃描完畢時,"次輕"的氣泡飄浮到R[2]的位置上…… 最後,經過n-1 趟掃描可得到有序區R[1..n] 注意: 第i趟掃描時,R[1..i-1]和R[i..n]分別為當前的有序區和無序區。掃描仍是從無序區底部向上直至該區頂部。掃描完畢時,該區中最輕氣泡飄浮到頂部位置R上,結果是R[1..i]變為新的有序區。
Ⅱ c語言冒泡排序詳解
冒泡排序是最簡單的排序方法,理解起來容易。雖然它的計算步驟比較多,不是最快的,但它是最基本的,初學者一定要掌握。
冒泡排序的原理是:從左到右,相鄰元素進行比較。每次比較一輪,就會找到序列中最大的一個或最小的一個。這個數就會從序列的最右邊冒出來。
以從小到大排序為例,第一輪比較後,所有數中最大的那個數就會浮到最右邊;第二輪比較後,所有數中第二大的那個數就會浮到倒數第二個位置……就這樣一輪一輪地比較,最後實現從小到大排序。
比如對下面這個序列進行從小到大排序:
90 21 132 -58 34
第一輪:
1) 90 和 21比,90>21,則它們互換位置:
21 90 132 -58 34
2) 90 和 132 比,90<132,則不用交換位置。
3)132 和 –58 比,132>–58,則它們互換位置:
21 90 -58 132 34
4)132 和 34 比,132>34,則它們互換位置:
21 90 -58 34 132
到此第一輪就比較完了。第一輪的結果是找到了序列中最大的那個數,並浮到了最右邊。
比較時,每輪中第 n 次比較是新序列中第 n 個元素和第 n+1 個元素的比較(假如 n 從 1 開始)。
第二輪:
1) 21 和 90 比,21<90,則不用交換位置。
2) 90 和 –58 比,90>–58,則它們互換位置:
21 -58 90 34 132
3) 90 和 34 比,90>34,則它們互換位置:
21 -58 34 90 132
到此第二輪就比較完了。第二輪的結果是找到了序列中第二大的那個數,並浮到了最右邊第二個位置。
第三輪:
1) 21 和 –58 比,21>–58,則它們互換位置:
-58 21 34 90 132
2) 21 和 34 比,21<34,則不用交換位置。
到此第三輪就比較完了。第三輪的結果是找到了序列中第三大的那個數,並浮到了最右邊第三個位置。
第四輪:
1) –58 和 21 比,–58<21,則不用交換位置。
至此,整個序列排序完畢。從小到大的序列就是「–58 21 34 90 132」。從這個例子中還可以總結出,如果有 n 個數據,那麼只需要比較 n–1 輪。而且除了第一輪之外,每輪都不用全部比較。因為經過前面輪次的比較,已經比較過的輪次已經找到該輪次中最大的數並浮到右邊了,所以右邊的數不用比較也
Ⅲ C語言冒泡排序原理
冒泡是第一次把最大的那個數或者最小的那個數搞到最後,第二次把第二大的或第二小的那個數搞到第二後,如此類推!第一個循環是控制循環次數。然後第二個循環就是拿來比較兩個數的大小,從第一個數開始,第一個數跟第二個比較,如果你想把這個數組從小到大排序,那麼如果第一個大過第二個,就把第一個跟第二個交換。然後就繼續比較第二個和第三個,如此類推。因為每做完一次循環,大的那個數就跑到前面去了,因為後面的就不用比較了,所以就有J<N-I-1,如果寫J<N,雖然是對的,但這樣會加大了運算量,程序的時間就長了。減一是因為如果不減的話最後一次數組就會越界。交換那裡,交換一定要用中間變數,不然是交換不了的。最後會變成兩個相同的值!
不懂的話繼續問吧,我會答的~!!
Ⅳ c語言冒泡排序是什麼
冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序演算法。
它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。
這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端,故名。
演算法原理編輯
冒泡排序演算法的運作如下:(從後往前)
比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
針對所有的元素重復以上的步驟,除了最後一個。
持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較
#include<stdio.h>
#define SIZE 8
voidbubble_sort(inta[],intn);
voidbubble_sort(inta[],intn)//n為數組a的元素個數
{
inti,j,temp;
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
{
if(a[i]>a[i+1])//數組元素大小按升序排列
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
intmain()
{
intnumber[SIZE]={95,45,15,78,84,51,24,12};
inti;
bubble_sort(number,SIZE);
for(i=0;i<SIZE;i++)
{
printf("%d",number[i]);
}
printf("\n");
}
Ⅳ 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語言中冒泡排序法和選擇排序法有哪些不同
1、冒泡排序法:一趟一趟的將兩個相鄰的數進行交換如果有10個數則需要排9躺,如果是從
大到小輸出則需要每次將後一個數和前一個數進行比較將較大的數賦值給錢一個數,將較小的數賦值給後一個數,其實就是兩個數交換,那麼第一趟交換完畢後,最
小的數便出現在了數組的最後面,然後進行第二趟的比較時則要對餘下的前9個數進行比較,9趟比較完成後則數組也已經排好序。
2、選擇排序法:10個數則是需要排9次,若按降序排列,第一次比較:則是將數組的第一個元素與數組中從第二個元素開始到最後的元素進行比較找到最大的數記錄下來然後將值賦值給數組的第一個元素,然後進行第二次比較:則是將數組的第二個元素與數組中從第三個元素開始到最後的元素進行比較,找最大的數記錄下來將值賦值給數組的第二個元素。。。依次循環找完
Ⅶ C語言冒泡排序加解題思路
冒泡排序,就是對一組數進行逐趟排序的方法,具體分為升序和降序。
以升序為例。
每一趟的任務,就是從一組數的第一個數開始,依次比較相鄰的兩個數的大小。既然是升序,那麼比較後,如果前者大於後者,那麼兩者交換位置。就這樣依次地比下去。
這樣的話,第一趟就把最大的數排到了最後。
而每再比較一趟的時候,都排除已經生成的結果,比如第二趟,不會再比較最後一個數(它已經是最大的了,當然如果比較也沒問題,浪費時間而已);第三趟,不會再比較最後兩個數。。。
每一趟都把最大的數排到當前范圍的末尾。
這樣循環下去,每一趟都會把當前范圍內最大的數扔到後面去。排序就完成了。
------------------------------------------------------------------------------------------------------------------------------
舉個升序排序的例子:
對於{ 10,5,3,11,9 }這組數,
第一趟,10與5比較,10 比5大,所以互換位置(5,10,3,11,9),10和3比較,10>3,所以互換位置(5,3,10,11,9),10與11比較,不用互換位置;11與9比較,互換位置(5,3,10,9,11),第一趟結束;
第二趟,由於11已經是最大的,那麼只剩下{5,3,10,9};5>3,所以互換位置(3,5,10,9);5<10,不用互換位置;10>9,互換位置(3,5,9,10),第二趟結束。
第三趟,只剩下{3,5,9},3<5,不用互換位置;5<9,不用互換位置,第三趟結束。
第四趟,只剩下{3,5},3<5,不用互換位置,第四趟結束。
此時由於只剩兩個數,本趟已經把兩個數較大的一個放到了第二的位置,所以循環到此結束。
結果就是{3,5,9,10,11}。
過程中,每一趟都會把相鄰的兩個數中較大的換到後面,即每趟中,最大的數都會被置換到最後,就像一個氣泡浮出水面一樣,越來越大,到出水時就是最大的。所以才叫冒泡排序。
Ⅷ c語言冒泡排序法詳解
任意兩個數作比較,大的放後面,小的放前面,然後大的在和下一個數比較,還是大的放後小的往前,以此類推,直到所有數比完了,然後輸出
Ⅸ C語言冒泡排序。
#include<stdio.h>
void main()
{
int a[10];
int i,j,t;
printf("input 10 numbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=0;j<9;j++) /*進行9次循環 實現9趟比較*/
for(i=0;i<9-j;i++) /*在每一趟中進行9-j次比較*/
if(a[i]>a[i+1]) /*相鄰兩個數比較,想降序只要改成a[i]<a[i+1]*/
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorted numbers: ");
for(i=0;i<10;i++)
printf(" %d",a[i]);
}
(9)C語言的冒號排序擴展閱讀:
冒泡排序演算法的運作
1、比較相鄰的元素。如果第一個比第二個大(小),就交換他們兩個。
2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大(小)的數。
3、針對所有的元素重復以上的步驟,除了最後已經選出的元素(有序)。
4、持續每次對越來越少的元素(無序元素)重復上面的步驟,直到沒有任何一對數字需要比較,則序列最終有序。
簡單的表示
#include <stdio.h>
void swap(int *i, int *j)
{
int temp = *i;
*i = *j;
*j = temp;
}
int main()
{
int a[10] = {2,1,4,5,6,9,7,8,7,7};
int i,j;
for (i = 0; i < 10; i++)
{
for (j = 9; j > i; j--)//從後往前冒泡
{
if (a[j] < a[j-1])
{
swap(&a[j], &a[j-1]);
}
}
}
for (i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
return 0;
}
參考資料來源:冒泡排序-網路
Ⅹ C語言冒泡排序
#include<stdio.h>
#defineMAX10//
#include<stdio.h>
#defineN10
intmain(){
inti,j,t,a[N];
printf("pleaseinputtennumbers: ");
for(i=0;i<N;i++)
scanf("%d",&a[i]); //原來只輸入了一個數!!!
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(a[i]<a[j]) //截圖結果是用>號
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
}
}
printf("outputthesortednumbers: ");
for(i=0;i<N;i++)
printf("%d",a[i]);
printf(" ");
return0;
}