题解 | #输入整型数组和排序标识#

输入整型数组和排序标识,对其元素按照升序或降序进行排序

https://www.nowcoder.com/practice/dd0c6b26c9e541f5b935047ff4156309

#include <stdio.h>

//利用快速排序算法实现
void Swap(int *a, int *b);
int Partition(int *numarr, int len, int start, int end);
void QuickOrder(int *numarr, int len, int start, int end);
void GetInputAndShowResult(void);

int main() {
    GetInputAndShowResult();
    return 0;
}

//一些可能的输入和输出
//1 [1] 0
//1 [1] 1
//2 [3 ,4] 0 -->[3, 4]
//Algo:QuickOrder
void Swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

int Partition(int *numarr, int len, int start, int end)
{
    if((numarr==NULL) || (len<0) || (start<0) || (end>len-1))
    {
        perror("Input Error!");
    }
    if(start == end)
    {
        return -1;
    }
    int smallidx = start-1;
    for(int idx=start; idx<end; idx++)
    {
        if(numarr[idx] < numarr[end])
        {
            smallidx++;
            if(smallidx < idx)
            {
                Swap(&numarr[smallidx], &numarr[idx]);
            }
        }
    }

    smallidx++;
    Swap(&numarr[smallidx], &numarr[end]);
    return smallidx;
}

void QuickOrder(int *numarr, int len, int start, int end)
{
    if(start == end)
    {
        return;
    }

    int idx = 0;
    idx = Partition(numarr, len, start, end);
    if(idx > start)
    {
        QuickOrder(numarr, len, start, idx-1);
    }
    if(idx < end)
    {
        QuickOrder(numarr, len, idx+1, end);
    }
}


void GetInputAndShowResult(void)
{
    int cnt = 0;
    int numarr[1000] = {0};
    int mode = 0;
    //输入待排序的元素个数,并检查参数
    scanf("%d", &cnt);
    if((cnt<1)||(cnt>1000))
    {
        return;
    }
    //const int arrsize = cnt;
    //int numarr[arrsize] = {0};
    //输入待排序的元素
    for(int i=0; i<cnt; i++)
    {
        scanf("%d", &numarr[i]);
        if((numarr[i]<0)||(numarr[i]>100000))
        {
            return;
        }
    }
    QuickOrder(numarr, cnt, 0, cnt-1);
    
    //输入选择的模式:0为升序,1为降序
    scanf("%d", &mode);
    if(mode == 0)
    {
        for(int j=0; j<cnt;j++)
        {
            printf("%d ",numarr[j]);
        }
    }
    else if(mode == 1)
    {
        for(int j=cnt-1; j>=0;j--)
        {
            printf("%d ",numarr[j]);
        }
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务