C语言高手进来改写解释一下这个冒泡排序
发布网友
发布时间:2022-07-26 08:20
我来回答
共3个回答
热心网友
时间:2023-10-18 18:52
首先数组定义长度为11,用的是1-10下标的元素,下标为0的元素没有用到。
冒泡排序的原理是,每次遍历数组元素,把最大的放到最后,这里的最后要排除掉前面已经选出来的最大值。
for(i=1;i<10;i++),i<10的意思,是只要遍历9次,因为最后一次不需要比了,肯定是只剩最小的了。
for(j=1;j<11-i;j++),j<11-i的意思,就是前面i-1遍历次已经把最大的i-1个数放在了数组最后,本次遍历只需要找出1至11-i的元素里的最大值就可以了。
另外,你的代码里有些问题,我给你改了一下。
void main()
{
int i,j,t,a[11];
printf("请输入10个数: \n");
for (i=1; i<11; i++)
scanf("%d",&a[i]);
for(i=1; i<10; i++)
for(j=1; j<11-i; j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
printf("排序后的顺序: \n");
for (i=1; i<=10; i++)
printf("%5d",a[i]);
printf(" \n");
}
热心网友
时间:2023-10-18 18:52
两重循环中i和j的值变化,及达到的目的
i j 达到的目的
1 1到9 把前10个数最大值交换到a[10]
2 1到8 把前9个数的最大值交换到a[9]
3 1到7 把前8个数的最大值交换到a[8]
4 1到6 把前7个数的最大值交换到a[7]
5 1到5 把前6个数的最大值交换到a[6]
6 1到4 把前5个数的最大值交换到a[5]
7 1到3 把前4个数的最大值交换到a[4]
8 1到2 把前3个数的最大值交换到a[3]
9 1到1 把前2个数的最大值交换到a[2]
完成以上操作,即完成了排序
热心网友
时间:2023-10-18 18:53
你这冒泡太完美,我无言以对。