Ⅰ 如何用c語言把冒泡排序每一次的排序過程體現出來
可以列印出來看嘛。程序里加輸出 i,j,a[0]到a[9]:
#include <stdio.h>
int main()
{
int a[10];
int i, j,k, temp;
printf("Please input ten numbers: \n");
for (i = 0; i < 10; i++) scanf("%d", &a[i]);
for (i = 0; i <帆鎮 9; i++) {
for (j = 0; j < 9 - i; j++) {
if (a[j] > a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; }
printf("i=%d j=%d results: ",i,j);
for (k = 0; k < 10; k++) printf("派銷 %d", a[k]);
printf("\n");
};};
for (i = 0; i < 10; i++) printf(" %d ", a[i]);
return 0;
}
例如:態羨粗
Please input ten numbers:
2 5 8 9 10 2 3 4 12 1
i=0 j=0 results: 2 5 8 9 10 2 3 4 12 1
i=0 j=1 results: 2 5 8 9 10 2 3 4 12 1
i=0 j=2 results: 2 5 8 9 10 2 3 4 12 1
...
i=0 j=8 results: 2 5 8 9 2 3 4 10 1 12
i=1 j=0 results: 2 5 8 9 2 3 4 10 1 12
i=1 j=1 results: 2 5 8 9 2 3 4 10 1 12
...
i=7 j=0 results: 2 2 1 3 4 5 8 9 10 12
i=7 j=1 results: 2 1 2 3 4 5 8 9 10 12
i=8 j=0 results: 1 2 2 3 4 5 8 9 10 12
Ⅱ 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 void sort(int *a,int len) {int i=0; int j; int t; for(i=0;ia[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } int main(int argc, char *argv[]) { int a[10]={ -999,2,3,77,12,88,0,-8,99,100 }; int i=0; sort(a,10); for(i=0;i<10;i++) { printf("%d ",a[i]); } return 0; }
Ⅲ 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]);
}
(3)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語言 冒泡排序法
對你需求有點疑問:
1、不要固定數=>理解為:總排序個數是可變的,比如5個數排序,600個數排序。
2、輸入一個排序一次=>理解為:每輸入一個數,這個數就加到要被排序的那組數中,然後對那組數進行一次「冒泡排序」。比如:
輸入1;此時序列為:1;
輸入8;此時序列為:1、8;
輸入5;此時序列為:1、5、8;
但是這個需求與冒泡排序演算法可能有點沖突。因為你要求每次輸入一個數就進行了一次排序,那麼下次輸入的數,是要插入已經排序好的序列中,這已經沒有了「冒泡」的過程,倒變成了插入排序...
3、從後面排序=>不理解:由於你要求輸入一次排序一次,並不是那種等待一組數據輸入完成之後,再進行排序,這已經沒有所謂的前後了啊?
第2條與第3條描述清楚後,我幫你解決...
Ⅳ c語言冒泡排序法詳解
任意兩個數作比較,大的放後面,小的放前面,然後大的在和下一個數比較,還是大的放後小的往前,以此類推,直到所有數比完了,然後輸出