标题:求大佬一道用函数和指针给数组排序的问题
只看楼主
luyu1998
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-3-30
结帖率:0
 问题点数:0 回复次数:2 
求大佬一道用函数和指针给数组排序的问题
数组由用户输入,数组中数的个数为奇数个,要求使用函数和指针,将数组中最大的数放在中间,第二大的数放在最大的数的左边,第三大的数放在最大的数右边,接下来的数按大小依次放在两边,以此类推。
搜索更多相关主题的帖子: 最大的 用户 
2017-05-09 23:06
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
程序代码:
#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;
}
收到的鲜花
  • luyu19982017-05-24 23:00 送鲜花  2朵  

DO IT YOURSELF !
2017-05-10 07:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
没难点吧,不就是排序,然后按题目要求重排一下?

demo
程序代码:
#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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-476872-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.588839 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved