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);
}
结果输出错误,求指教 展开
例如: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);
}
结果输出错误,求指教 展开
3个回答
展开全部
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() 里面的声明。
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输出,显示只有一行输出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
排序算法错误。
if(input[j]>input[j+1])
{
temp=input[j];
input[j]=input[j+1];
input[j+1]=temp;
}
input越界。n个数只需要比较n-1次,就能找到最大的。
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数组,最后就是一片混乱。这也是数组越界的典型危害。
不知道这样说你明白不?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把void main()放到#include <stdio.h>后面看看
追问
问题不是函数申明的问题,是输出只有排序好的那一行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询