c语言,用选择法对10个数排序,按正负数分开输出?

如题所述

选择排序:大循环i依次取元素和后面所有元素比较,找出其中最值,和当前i的元素交换。一次大循环交换一次。

程序思路:

一、排序函数:根据传参,实现降序升序两种功能。

二、数组输出:根据传参,实现正数和负数输出两种功能。

下面是代码:


#include <stdio.h>

void px(int nums[],int len,int t);//排序

void showNums(int nums[],int len,int t);//输出

int main()

{

    int nums[10]={8,7,-1,2,-5,4,9,-3,-6,1};

    printf("原数组:8,7,-1,2,-5,4,9,-3,-6,1\n");

    printf("升序排列后:\n");

    px(nums,10,1);

    printf("|---正数为:");

    showNums(nums,10,1);

    printf("|---负数为:");

    showNums(nums,10,0);

    //--------------------------------

    printf("降序排列后:\n");

    px(nums,10,0);

    printf("|---正数为:");

    showNums(nums,10,1);

    printf("|---负数为:");

    showNums(nums,10,0);


}

void showNums(int nums[],int len,int t)//t=1输出正数,t=0输出负数

{

    int i;

    for(i=0;i<len;i++)

        if((t && nums[i]>0)||(!t && nums[i]<0))

            printf("%d ",nums[i]);

    printf("\n");

}

void px(int nums[],int len,int t)//t=1升序,t=0降序

{

    int i,j,k,m;

    for(i=0;i<len-1;i++)

    {

        m=nums[i],k=i;

        for(j=i+1;j<len;j++)

            if((t && m>nums[j])||(!t && m<nums[j])) m=nums[j],k=j;

        m=nums[i],nums[i]=nums[k],nums[k]=m;

    }

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-06-30
1.
选择排序:大循环i依次取元素和后面所有元素比较,找出其中最值,和当前i的元素交换。一次大循环交换一次。 程序思路: 一、排序函数:根据传参,实现降序升序两种功能。
2.
数组输出:根据传参,实现正数和负数输出两种功能。 下面是代码: #include <stdio.h> void px(int nums[],int len,int t);//排序 void showNums