一道机考的改错题,c语言

#include<stdio.h>#defineN20voidfun(inta[],intn){inti,j,t,p;for(j=0;j<n-1;j++){/******... #include <stdio.h>
#define N 20
void fun(int a[], int n)
{
int i, j, t, p;
for (j=0; j<n-1; j++)
{
/********found********/
p=j;
for (i=j; i<n; i++)
if(a[i] < a[p])
{
/********found********/
p=j;//改之前是p=i;我改的是直接删掉,和答案是一个意思么
t = a[p];
a[p] = a[i];
a[i] = t;
}
}
}
main()
{
int a[N] = {9, 6, 8, 3, -1}, i, m = 5;
printf("排序前:");
for (i=0; i<m; i++)
printf("%d,", a[i]);
printf("\n");
fun(a, m);
printf("排序后:");
for (i=0; i<m; i++)
printf("%d,", a[i]);
printf("\n");
}
展开
 我来答
死后是好人
2011-09-18 · TA获得超过2638个赞
知道小有建树答主
回答量:628
采纳率:0%
帮助的人:1035万
展开全部
。。。
服了,显然是不一样的啊
我给你分析下结果吧
如果删掉
p就是始终等于j的,也就是说a[p]即a[j]
你交换的时候是a[j]和a[i]
比如你的第一轮
j=0的时候,就开始一直找,遇到比a[0]小的数,就将他交换到a[0]的位子上
虽然最后结果没错,是升序排列,但是你这个已经不是冒泡排序了,你这个算法已经是选择排序了
冒泡排序是 两个 两个比较,如果有顺序相反的,就交换,只有第一次比较会和a[j]有关,第一次比较完后,就是2和3比,3和4比……以此类推
和选择排序中之后每一个数都和第一个数相比进行交换(即从排序队列中选取最小的移到队列首位)是完全不同的
你都已经把排序的算法都改掉了
人要冒泡排序算法,你给人一个选择排序算法,电脑能给你算对才怪,虽然结果一样
追问
我只是想鄙视一下评分系统。
追答
额,但是这个应该是冒泡排序没错了,你看楼上也是确认是冒泡排序的。。。
有的考试系统是不给力。。。
wanghongbest
2011-09-17
知道答主
回答量:27
采纳率:0%
帮助的人:4.1万
展开全部
改错是可以的,有时候就是删去一句语句。
追问
那我那样改对么?系统没给我分。。。
追答
p=i确实应该删去呀,估计是你的模拟系统有问题
运行结果也正确呀
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
来自九十渡怜香惜玉&#x00A0;的大海
2011-09-17 · TA获得超过201个赞
知道答主
回答量:119
采纳率:0%
帮助的人:68.2万
展开全部
p=i;在这里没有用,应该被删掉
追问
我就是删了,然后评分系统狠狠扇了我一巴掌。。。
追答
输出没有问题啊
/*p=j;//改之前是p=i;我改的是直接删掉,和答案是一个意思么*/
把这个里面的p=j;也删了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华哥vi9ts
2011-09-17 · TA获得超过834个赞
知道小有建树答主
回答量:416
采纳率:0%
帮助的人:330万
展开全部
这是冒泡排序法
对,就是p=j; 删掉也行。
改成for(i=j+1;i<n;i++)也行,不改也没事
更多追问追答
追问
系统没给我分啊。。。没给我分。。。。
追答
我运行了一下,发现结果是升序排列,题目要求是降序,还是升序,你最好把题目发给我看一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式