蓝桥杯真题三部排序

这篇博客介绍了一个简单的C语言程序,实现了一个名为`sort3p`的函数,该函数对整型数组进行排序,将负数移动到前面,正数移动到后面,0则保持原位。在`while`循环中,通过判断数组元素的正负,使用交换元素的方法实现了排序。当遇到0时,只需将指针`p`递增,无需进行其他操作。程序通过`show`函数展示排序后的数组效果。
摘要由CSDN通过智能技术生成

代码填空 2013 省 赛

难度:简单

#include <stdio.h>

void show(int* x, int len)
{
    int i;
    for(i=0; i<len; i++)
    {
        printf("%d,",x[i]);
    }
    
    printf("\n");
}

void sort3p(int* x, int len)
{
    int p = 0;
    int left = 0;
    int right = len-1;
    
    while(p<=right){
        if(x[p]<0){
            int t = x[left];
            x[left] = x[p];
            x[p] = t;
            left++;
            p++;
        }
        else if(x[p]>0){
            int t = x[right];
            x[right] = x[p];
            x[p] = t;
            right--;
            //p++;                
        }
        else{
            _______________;
        }
    }
    
    show(x, len);
}

int main()
{
    int a[] = {-1,0,1,-2,0,2,-3,0,0,3,-4,-5,4,-6,0,5,6};
    int b[] = {-1,0,-1,-2,0,-2,-3,0,0,-3,-4,-5,-4,-6,0,-5,-6};
    int c[] = {1,0,1,2,0,2,3,0,0,3,4,5,4,6,0,5,6};
    
    sort3p(a,sizeof(a)/sizeof(int));
    sort3p(b,sizeof(b)/sizeof(int));
    sort3p(c,sizeof(c)/sizeof(int));
        
    return 0;
}

 

#include <stdio.h>

void show(int* x, int len)
{
    int i;
    for(i=0; i<len; i++)
    {
        printf("%d,",x[i]);
    }
    
    printf("\n");
}

void sort3p(int* x, int len)
{
    int p = 0;
    int left = 0;
    int right = len-1;
    
    while(p<=right){
        if(x[p]<0){
            int t = x[left];
            x[left] = x[p];
            x[p] = t;
            left++;
            p++;
        }
        else if(x[p]>0){
            int t = x[right];
            x[right] = x[p];
            x[p] = t;
            right--;
            //p++;                
        }
        else{
            p++;
        }
    }
    
    show(x, len);
}

int main()
{
    int a[] = {-1,0,1,-2,0,2,-3,0,0,3,-4,-5,4,-6,0,5,6};
    int b[] = {-1,0,-1,-2,0,-2,-3,0,0,-3,-4,-5,-4,-6,0,-5,-6};
    int c[] = {1,0,1,2,0,2,3,0,0,3,4,5,4,6,0,5,6};
    
    sort3p(a,sizeof(a)/sizeof(int));
    sort3p(b,sizeof(b)/sizeof(int));
    sort3p(c,sizeof(c)/sizeof(int));
        
    return 0;
}

思路

        此题不难看出 在sort3p函数内

        通过if判断是否正数,负数挪到前面,正数挪到后面

        所以当0 的时候,不需要进行任何操作,只需要p++,将需要排序的位数移至下一位,当遇到负数时,前面的0自然会被交换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值