C选择排序程序
发表在C语言图书答疑 2015-12-02
是否精华
版块置顶:
#include <stdio.h>
int main()
{
int i,j;
int a[10];
int iTemp; 
int iPos; 
printf("为数组元素赋值:\n");
/*从键盘为数组元素赋值*/
for(i=0;i<10;i++)
{
printf("a[%d]=",i);
scanf("%d", &a[i]);
}
/*从小到大排序*/
for(i=0;i<9;i++)  /*设置外层循环为下标0~8的元素*/

iTemp = a[i];  /*设置当前元素为最小值*/
iPos = i; /*记录元素位置*/

for(j=i+1;j<10;j++)  /*内层循环i+1到9*/

if(a[j]<iTemp)  /*如果当前元素比最小值还小*/

iTemp = a[j];   /*重新设置最小值*/
iPos = j;  /*记录元素位置*/


/*交换两个元素值*/
a[iPos] = a[i]; 
a[i] = iTemp; 
}
/*输出数组*/
for(i=0;i<10;i++)
{
printf("%d\t",a[i]); /*输出制表位*/
if(i == 4) /*如果是第5个元素*/
printf("\n"); /*输出换行*/
}

return 0; /*程序结束*/
}
想问下大家个问题,这程序里面第二个for里面的外层循环赋值iPos = i;然而里面嵌套的内层for循环赋值iPos = j;那么最终应该是iPos = j,那接下来a[iPos] = a[i]中的ipos值应该就是j了,而之前赋值的iPos = i好像没起作用啊。但我去掉iPos = i语句时运行结果就不对了,想问下这是为什么呢?谢谢
分享到:
精彩评论 4
学分: LV1
TA的每日心情
开心
2020-06-16 09:16:38
2015-12-03
沙发
读者你好,这是哪本书中的哪个实例?
响水潭88
学分:0 LV1
2015-12-03
板凳
C语言入门到精通——第八章第12个实例
响水潭88
学分:0 LV1
2015-12-07
地板
哪位大佬出手帮忙下吧,这问题等了好久了,谢谢!
学分: LV1
TA的每日心情
开心
2020-06-16 09:16:38
2015-12-08
4L
内层循环的意义是,如果还有比iTemp这个最小值还小的数的话,那么a[iPos] = a[j]。但是如果当前元素没有比iTemp还小的话,是不用记录元素位置iPos = j的,这时候还是iPos = i的。
首页上一页 1 下一页尾页 4 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照