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