c++关于这个函数的几个问题,请高手来指教。

voidSample::funSort(Sample&s){inti,j,k,temp;for(i=0;i<Max;i++){k=i;for(j=i+1;j<Max;j+... void Sample::funSort(Sample &s)
{
int i, j, k, temp ;
for(i = 0 ; i < Max ; i++) {
k = i ;
for(j = i + 1; j < Max ; j++)
if(s.A[j] > s.A[k]) k = j ;
temp = s.A[i] ;
s.A[i] = s.A[k] ;
s.A[k] = temp ;
}
}
1.第二个for中有多条语句,为什么没有大括号?同样,if里面也有多条语句,竟然也没加括号。
2.这段程序我觉得应该简化成void Sample::funSort(Sample &s)
{
int i, k, temp ;
for(i = 0 ; i < Max ; i++) {

for(j = i + 1; j < Max ; j++)
if(s.A[j] > s.A[j])
temp = s.A[i] ;
s.A[i] = s.A[j] ;
s.A[j] = temp ;
}
}不是更好?
3.我认为第一个for中i应该<max-1更合理。
请内行人解释一下,谢谢。
展开
 我来答
fbi2999
2009-03-19 · TA获得超过944个赞
知道答主
回答量:119
采纳率:0%
帮助的人:84.8万
展开全部
程序修改如下
你的问题我慢慢回答 啊
void Sample::funSort(Sample &s)
{
int i, j, k, temp ;
for(i = 0 ; i < Max ; i++)
{
k = i ;
for(j = i + 1; j < Max ; j++)
{
if(s.A[j] > s.A[k])
{
k = j ;
temp = s.A[i] ;
s.A[i] = s.A[k] ;
s.A[k] = temp ;
}
}
}
}
1.第二个for中有多条语句,为什么没有大括号?同样,if里面也有多条语句,竟然也没加括号。
的确如此,已经修改
2.这段程序我觉得应该简化成void Sample::funSort(Sample &s)
{
int i, k, temp ;
for(i = 0 ; i < Max ; i++) {

for(j = i + 1; j < Max ; j++)
if(s.A[j] > s.A[j])
temp = s.A[i] ;
s.A[i] = s.A[j] ;
s.A[j] = temp ;
}
}不是更好?
不行,首先,你的声明中少了j。程序中k的使用起到一个临时的变量,作用是防止i和j的意外变化,和temp的作用相似
3.我认为第一个for中i应该<max-1更合理。
数组是从0开始的,小于max刚好是0到max-1,一共max个元素。如果是小于max-1 ,岂不是少了一个??
请内行人解释一下,谢谢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
200600651
2009-03-21
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
你的理解是正确的i<max-1更合理,但要在 if后加个大括号
void Sample::funSort(Sample &s)
{
int i, k, temp ;
for(i = 0 ; i < Max ; i++) {

for(j = i + 1; j < Max ; j++)
if(s.A[j] > s.A[j])
{//加的
temp = s.A[i] ;
s.A[i] = s.A[j] ;
s.A[j] = temp ;
}//加的
}
关于源程序你可以这样理解:
void Sample::funSort(Sample &s)
{
int i, j, k, temp ;
for(i = 0 ; i < Max ; i++) {
k = i ;
for(j = i + 1; j < Max ; j++)
{//加的
if(s.A[j] > s.A[k]) k = j ;相当于一个记号,记下比s.A[i]元素大的角标
}//加的
temp = s.A[i] ;
s.A[i] = s.A[k] ;
s.A[k] = temp ;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jaycnvip
2009-03-19 · TA获得超过767个赞
知道小有建树答主
回答量:998
采纳率:100%
帮助的人:633万
展开全部
没有加大括号就是它的算法精辟所在,原程序等价于

void Sample::funSort(Sample &s)
{
int i, j, k, temp ;
for(i = 0 ; i < Max ; i++) {
k = i ;
for(j = i + 1; j < Max ; j++) {
if(s.A[j] > s.A[k]) k = j ;
temp = s.A[i] ;
}//for 循环包含 if ,if 的作用域到这一行为止,下面的两行要参加外层的循环
s.A[i] = s.A[k] ;
s.A[k] = temp ;
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式