首页 > 代码库 > 华为机试—元素按奇偶排序

华为机试—元素按奇偶排序

题目:元素按奇偶排序 

给定一个数组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>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
    return *(int*)b-*(int*)a;
}
int main(int argc, char *argv[])
{
    int input[100];
    int output[100];
    int t;
    int i;
    while(~scanf("%d",&t))
    {
        input[i++]=t;
    }
    int len=i;
    qsort(input,len,sizeof(int),cmp);
    int left=len/2-1;
    int right=len/2;

    for(int k=0;k<len;++k)
    {
        if(k%2==0)
            output[right++]=input[k];
        else
            output[left--]=input[k];
    }
    for(i=0;i<len;++i)
    {
        printf("%d ",output[i]);
    }
    printf("\n");

    return 0;
}



华为机试—元素按奇偶排序