请教C语言中冒泡法的问题

来源:百度知道 编辑:UC知道 时间:2024/05/05 00:21:45
#include<stdio.h>
void main()
{
int data[11], i, j, post, t;
printf("Please input 10 integer datas:\n");
for(i = 1; i<=10; i++) //输入10个数字
scanf("%d",&data[i]); //输入10个数字
for(i = 1; i <= 9; i++) //对10个数进行9次排序
{
post = i; //找出第i个数至第10个数中最小数所在位置post,假设i就是最小的那个数字
for(j = i+1; j <= 10; j++) //如果 j <= 9的话,那么会有一个数没有排序
if(data[j] < data[post]) // 这2句我不是很理解 post = j; //这段不懂
if(post != i) //将第i个数与第post个数互换
{
t = data[i];
data[i] = data[post];
data[post] = t;
//data[i] = data[post]; 这个我不是很懂,为什么不能直接赋值呢? }
}
printf("The sorted numbers:\n");
for(i = 1; i <= 10; i++) //输出排序后的结果
printf("%d ", data[i]);
}
冒泡的原理我还是明白的
但是具体代码就有些疑问了
希望大家给我一点帮助吧...谢谢!

#include<stdio.h>
void main()
{
int data[11], i, j, post, t;
printf("Please input 10 integer datas:\n");
for(i = 1; i<=10; i++) //输入10个数字
scanf("%d",&data[i]); //输入10个数字
for(i = 1; i <= 9; i++) //对10个数进行9次排序
{
post = i; //找出第i个数至第10个数中最小数所在位置post,假设i就是最小的那个数字
for(j = i+1; j <= 10; j++) //如果 j <= 9的话,那么会有一个数没有排序
if(data[j] < data[post]) // 意思是data[j]与暂时设定为最小的值data[post]进行比较,如果data[j]比data[post]还小,那么就进行交换, post = j; //记录data[j]的位置,以便后面的交换用到
if(post != i) //将第i个数与第post个数互换
{
t = data[i];
data[i] = data[post];
data[post] = t;
//data[i] = data[post]; 不能直接赋值,如果直接赋值就等于没有交换了 }
}
printf("The sorted numbers:\n");
for(i = 1; i <= 10; i++) //输出排序后的结果
printf("%d ", data[i]);
}