C语言求解详细过程
求每一步的详细分析过程,我看的脑袋快炸了。主要是第二个if语句,怎么只有成立的处理,没有不成立的处理,如果if(p!=i)不成立,else在哪里?怎么处理?...
求每一步的详细分析过程,我看的脑袋快炸了。
主要是第二个if语句,怎么只有成立的处理,没有不成立的处理,如果if(p!=i)不成立,else在哪里?怎么处理? 展开
主要是第二个if语句,怎么只有成立的处理,没有不成立的处理,如果if(p!=i)不成立,else在哪里?怎么处理? 展开
8个回答
展开全部
这是一个选择排序的程序,总体思路是:
从数组头开始针对每个数组元素进行操作
针对每个元素开始,在其后的所有元素中找最大值,并与当前元素进行交换,
这样当前元素会保存之后所有元素的最大值,
然后再将当前元素的下一元素作为起始元素,并在其后找最大值,直到倒数第2个元素找完为止
最终数组第1元素是全数组中最大值,第2元素是除第1元素外最大值,依此类推
for ( i=0;i<10;i++ ) //从第1元素找到倒数第2个为止,每次找当前元素后面所有元素最大值
{ //找完后与当前元素交换
p=i;q=a[i]; //先暂时将当前元素当最大值,p记录最大值下标号,q记录最大值取值
for ( j=i+1;j<10;j++ ) //从当前元素后开始一直比较到最后一个,找出最大值及相应位置(下标)
//所以这里有个错误结束条件应为j<11
if(q<a[j] {p=j;q=aj];} //如果当前元素的值大于最大值,记录下标号及数值,取代原先所记
//否则什么也不做
if(p!=i) //找完了,如果需要交换则进行下述交换操作
{ s=a[i];a[i]=a[p];a[p]=a[i]; } // 当p==i 时,找到的最大值已经在a[i]就不需要交换啦,
//所以不用写else的处理语句
printf("%d,",a[i]); //输出当前找到的最大值
}
从数组头开始针对每个数组元素进行操作
针对每个元素开始,在其后的所有元素中找最大值,并与当前元素进行交换,
这样当前元素会保存之后所有元素的最大值,
然后再将当前元素的下一元素作为起始元素,并在其后找最大值,直到倒数第2个元素找完为止
最终数组第1元素是全数组中最大值,第2元素是除第1元素外最大值,依此类推
for ( i=0;i<10;i++ ) //从第1元素找到倒数第2个为止,每次找当前元素后面所有元素最大值
{ //找完后与当前元素交换
p=i;q=a[i]; //先暂时将当前元素当最大值,p记录最大值下标号,q记录最大值取值
for ( j=i+1;j<10;j++ ) //从当前元素后开始一直比较到最后一个,找出最大值及相应位置(下标)
//所以这里有个错误结束条件应为j<11
if(q<a[j] {p=j;q=aj];} //如果当前元素的值大于最大值,记录下标号及数值,取代原先所记
//否则什么也不做
if(p!=i) //找完了,如果需要交换则进行下述交换操作
{ s=a[i];a[i]=a[p];a[p]=a[i]; } // 当p==i 时,找到的最大值已经在a[i]就不需要交换啦,
//所以不用写else的处理语句
printf("%d,",a[i]); //输出当前找到的最大值
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p记录的是后续的第几个,q记录的是相应的值,如果if(p!=i)不成立,说明q>=a[j],即不交换。就是说如果当前前面的数据比小,则交换,否则不交换,q来记录当前最大值,第一次比完,a[0]最大,后面依次
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
追问
if语句只有成立处理,没有不成立处理,那不成立怎么办?
追答
不成立,接着比较下一个元素啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
冒泡排序,那么多人解释,我就不说了。语言就是靠整体理解,再一个你按照它的步骤把数字一个一个带入到里边在你脑海里运行一下,就可以讲清楚的理解原理了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
IF是一个假设成立的条件,如果if(p!=i)不成立,它就不会运行交换语句,直接到输出语句。
P是用来存放每次比较中最大的数的下标,如果说和原来的初始值I一样的话,也就是P==I,就没必要去交换了,浪费程序运行。(其实你可以理解为这个IF可要可不要,因为它只是做到一个过滤的作用)
P是用来存放每次比较中最大的数的下标,如果说和原来的初始值I一样的话,也就是P==I,就没必要去交换了,浪费程序运行。(其实你可以理解为这个IF可要可不要,因为它只是做到一个过滤的作用)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-15
展开全部
不知道你定义这么多变量干嘛,如果是冒泡排序,就2点:外部排序和内部排序,相互比较就得了,网上找代码吧!!!冒泡的效率很低的,所以一般不用!!!
追问
if语句只有成立处理,没有不成立处理,那不成立怎么办?
追答
个人觉得不需要处理吧,虽然我没运行,首先你是将i赋给p的吧!!!有if不一定有else的说,亲!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询