求大佬一道用函数和指针给数组排序的问题
数组由用户输入,数组中数的个数为奇数个,要求使用函数和指针,将数组中最大的数放在中间,第二大的数放在最大的数的左边,第三大的数放在最大的数右边,接下来的数按大小依次放在两边,以此类推。
程序代码:
#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; }