1:直接冒泡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include<stdio.h> int main() { int i,j; int t; int a[]={10,9,8,7,6,5,4,3,2,1}; //此排序實現順序排序 int s= sizeof (a)/ sizeof (a[0]); //求數組元素個數 for (i=0;i<s-1;i++) //確定排序的趟數 { //下面為每趟冒泡排序 for (j=0;j<s-1-i;j++) { if (a[j]>a[j+1]) { t=a[j];a[j]=a[j+1];a[j+1]=t; } } } for (i=0;i<s;i++) //驗證結果 { printf( "%d " ,a[i]); } return 0; } |
2:函數冒泡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include<stdio.h> void mppx( int a[], int s) { int i,j; int t; for (i=0;i<s-1;i++) { for (j=0;j<s-1-i;j++) { if (a[j]>a[j+1]) { t=a[j];a[j]=a[j+1];a[j+1]=t; } } } } int main() { int a[]={10,9,8,7,6,5,4,3,2,1}; //此排序實現順序排序 int i; int s= sizeof (a)/ sizeof (a[0]); mppx(a,s); //冒泡排序函數,這里a是傳遞a數組首元素的地址&a[0] for (i=0;i<s;i++) { printf( "%d " ,a[i]); } return 0; } |
3:冒泡優化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#include<stdio.h> void mppx( int a[], int s) { int i,j; int t; for (i=0;i<s-1;i++) { int f=1; //假設在一趟排序后數據已經有序 for (j=0;j<s-1-i;j++) { if (a[j]>a[j+1]) { t=a[j];a[j]=a[j+1];a[j+1]=t; f=0; //當f=0時,表示數組還沒有有序 } } if (f==1) //當有序的時候就直接跳出來,提高效率 { break ; } } } int main() { int a[]={10,9,8,7,6,5,4,3,2,1}; int i; int s= sizeof (a)/ sizeof (a[0]); mppx(a,s); for (i=0;i<s;i++) { printf( "%d " ,a[i]); } return 0; } |
排序后結果·
總結:
冒泡排序的核心部分就是雙重嵌套循環,因此復雜度比較高。
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!
原文鏈接:https://blog.csdn.net/qq_52988578/article/details/113931074