C语言冒泡法

C语言冒泡法第三个和第四个for循环不太清楚

#include<stdio.h> 

void main() 

int a[10]; 

int i,j,t; 

printf("input 10 numbers:\n"); 

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:\n"); 

for(i=0;i<10;i++) 

printf(" %d",a[i]);


}

扩展资料:

冒泡排序算法的运作

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\n", a[i]);

}

return 0;

}

参考资料来源:冒泡排序-百度百科

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-23
第3个循环体,分为内外两层循环,内层循环的意思是,每一次进入该循环体时的循环次数都比上一次少1次,if语句就是比对当前元素和下一个元素哪个大,如果当前的大,用第三方变量作为中介进行交换(两个杯子的水如何交换,这个你应该听过吧)
内层循环的每一次大循环,都已经将目前的最大值转移到了后面,所以第2次就不需要在比对这个数据了
4 3 2 1
4>3==3 4 2 1
4>2==3 2 4 1
4>1==3 2 1 4
3 2 1 4
3>2==2 3 1 4
3>1==2 1 3 4
2 1 3 4
2>1==1 2 3 4
冒泡就是这样的顺序
第4个循环体,就是输出排序之后的数组数据追问

那么j在循环中循环了几次

追答

j每一次都是从0开始,也就是数组的第一个元素开始,j的最大值都比上一次小1

本回答被提问者采纳