C语言问题,求教

给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到output[]数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[]... 给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
例如:input[] = {3, 6, 1, 9,7} output[] = {3, 7, 9, 6,1}; input[] = {3, 6, 1, 9, 7, 8} output[] = {1, 6, 8, 9, 7,3}
#include<stdio.h>
void sort(int input[],int n,int output[])
{
int i,j;
int temp=0;
int med;
int k;
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(input[j]>input[j+1])
{
temp=input[j];
input[j]=input[j+1];
input[j+1]=temp;
}
}
}
if(n%2!=0)
{
for(i=0;i<n;i++)
printf("%d",input[i]);
printf("\n");
med=(n-1)/2;
output[med]=input[n-1];
for(i=1,k=1;i<=med;i++)
{
output[med-i]=input[n-1-k];
output[med+i]=input[n-2-k];
k=k+2;
}
}
else
{
for(i=0;i<n;i++)
printf("%2d",input[i]);
printf("\n");
med=n/2;
output[med]=input[n-1];
output[0]=input[0];
for(i=1;i<n/2;i++)
{
output[med-i]=input[n-1-k];
output[med+i]=input[n-2-k];
k=k+2;
}
}
for(i=0;i<n;i++)
printf("%2d",output[i]);
printf("\n");
}

void main()
{
void sort(int input[],int n,int output[]);
int b[]={3,6,1,9,7,8};
int output2[]={0};
sort(b,6,output2);
}
结果输出错误,求指教
展开
 我来答
hj304huan
2013-09-16 · TA获得超过196个赞
知道小有建树答主
回答量:135
采纳率:0%
帮助的人:105万
展开全部
void sort(int input[],int n,int output[]); 声明不要写main()里面哦
1.声明写外面。
void sort(int input[],int n,int output[]);
void main()
{
int b[]={3,6,1,9,7,8};
int output2[]={0};
sort(b,6,output2);
}
2.或者直接去掉main() 里面的声明。
追问
还是没有达到要求输出,两个printf输出,显示只有一行输出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sqe0111
2013-09-16 · 超过13用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:28.4万
展开全部
排序算法错误。
if(input[j]>input[j+1])
{
temp=input[j];
input[j]=input[j+1];
input[j+1]=temp;
}
input越界。n个数只需要比较n-1次,就能找到最大的。
更多追问追答
追问
显示排序正确就是第二个
for(i=0;i<n;i++)
printf("%2d",output[i]);
printf("\n");
显示不出来
追答
不管结果如何,这个越界都是错误的,只是暂时没表现出来,程序可能会极不稳定,需要注意。
还有你的局部变量k并没与初始化,这可能是一个乱的值。
你的output并没有申请那么大的空间,也存在严重的越界问题,因为你的output在数组b后面申请,所以在堆栈中的位置位于数组b之上,而空间应该只有4个字节,当你进行排序算法的时候,系统不会去自动分配,也不会判读是否越界,而是根据数组的下标直接读取后面的内容,也就是说你output[1],实际上指向b[0],output[2]指向b[1],以此类推这样,你在修改output内容的同时也在修改b数组,最后就是一片混乱。这也是数组越界的典型危害。
不知道这样说你明白不?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友824a598
2013-09-16
知道答主
回答量:46
采纳率:0%
帮助的人:12.8万
展开全部
把void main()放到#include <stdio.h>后面看看
追问
问题不是函数申明的问题,是输出只有排序好的那一行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式