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