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

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

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

程序思路:

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

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

下面是代码:

#include <stdioh>

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;

  }

}

B1输入公式:
=COUNTIF(A:A,A1)+COUNTIF(A:A,-A1)

C1输入公式:
=ABS(A1)

选中二个单元格一起下拉,

然后选中A,B,C三列,先按B列降序排列,再按C列升序排列即可

#include<stdioh>
main()
{int n,i,j,t,a[100];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
for(j=0;j<n-i;j++)
if(a[j]>0&&a[j+1]<0)
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13382588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存