求大佬一道用函数和指针给数组排序的问题
数组由用户输入,数组中数的个数为奇数个,要求使用函数和指针,将数组中最大的数放在中间,第二大的数放在最大的数的左边,第三大的数放在最大的数右边,接下来的数按大小依次放在两边,以此类推。
2017-05-09 23:06
程序代码:#include <stdio.h>
#include <malloc.h>
void input(int* buf,int len)
{
for(int i=0;i<len;i++) scanf("%d",buf+i);
}
void prn(int* buf,int len)
{
for(int i=0;i<len;i++) printf("%d ",*(buf+i));
printf("\n");
}
void sort(int* buf,int len)
{
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
if(*(buf+i)>*(buf+j))
{
int tmp=*(buf+i);
*(buf+i)=*(buf+j);
*(buf+j)=tmp;
}
}
}
}
void newsort(int* buf,int len)
{
int* tbuf;
tbuf=(int*)malloc(sizeof(int)*len);
int i;
for(i=0;i<len;i++)
{
if(i%2)
{
*tbuf=*(buf+i);
tbuf++;
}
}
buf+=len-1;
for(i=0;i<len;i++)
{
if(i%2==0)
{
*tbuf=*(buf-i);
tbuf++;
}
}
tbuf-=len;
for(i=0;i<len;i++)
{
printf("%d ",*(tbuf+i));
}
printf("\n");
}
int main()
{
int n;
printf("请输入数据个数(应该是奇数,如果不是系统自动转换):");
scanf("%d",&n);
if(n%2==0)
{
++n;
printf("你所希望的个数不是奇数,请按下面数字 %d 录入\n",n);
}
int* buf;
buf=(int*)malloc(sizeof(int)*n);
input(buf,n);
sort(buf,n);
newsort(buf,n);
return 0;
}

2017-05-10 07:39
程序代码:#include <stdio.h>
#include <stdlib.h>
int comp( const void* a, const void* b )
{
if( *(int*)a < *(int*)b )
return -1;
if( *(int*)a > *(int*)b )
return +1;
return 0;
}
int main( void )
{
int a[] = { 1,4,2,3,0,6,5 };
const size_t n = sizeof(a)/sizeof(*a);
// 从小到大排序
qsort( a, n, sizeof(*a), &comp );
// 重排后输出
for( size_t i=0; i!=n; ++i )
printf( "%d ", a[i<n/2 ? 2*i+1 : 2*n-2*i-2] );
return 0;
}
2017-05-10 08:43