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

来源:百度知道 编辑:UC知道 时间:2024/05/12 15:44:48
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更合理。
请内行人解释一下,谢谢。

没有加大括号就是它的算法精辟所在,原程序等价于

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 ;
}
}

程序修改如下
你的问题我慢慢回答 啊
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 =