数组排序(输入N个整数从小到大进行编号,不能改变数组顺序)

题目:

从数组A中的N(0<N<100)个整数中从小到大进行连续编号,输出各个元素的编号。要求不能改变数组A中元素的顺序,且相同的数据要具有相同的编号。例如A=(5,3,4,7,3,5,6) 则输出(3,1,2,5,1,3,4)。

程序思路:由于不能改变输入数据顺序,定义一个num[2][100]的二维数组存储相应的数据。第一行存储输入的数据,第二行存储对应的排序(初始设置为0)。每次从第一行中寻找到最小元素,将其第二行写入对应的排名。

程序:

#include <stdio.h>

void sort(int num[][100],int count);   //形式参数,第一维可以省略

void main()
{
	int num[2][100],count=0;
	char ch;

	//输入一串数据,输出相应的排名,不改变位置
	printf("输入数字序列:(@表示结束)");

	while((ch=getchar())!='@'&&count<=100)  //初始化输入
	{
		if(ch!=' '&&ch!='\n')
		{
			num[0][count]=ch-'0';
			num[1][count++]=0;
		}
	}
	sort(num,count);

}

void sort(int num[][100],int count)
{
	int i,j,k,min,rank=0,last=-32768;
	//排序

	for(i=0;i<count;i++)  
	{
		j=0;		
		while(num[1][j]!=0)   //寻找每一轮第一个未排名数的下标
			j++;		
	
		min=j;

		for(k=0;k<count;k++)    //每一轮最小值
			if(num[0][k]<num[0][min]&&num[1][k]==0)
				min=k;
		
		if(num[0][min]==last)
			num[1][min]=rank;
		else
			num[1][min]=++rank;

		last=num[0][min];		

	}
	for(i=0;i<count;i++)
	{
		printf("%2d",num[1][i]);
	
	}

	printf("\n");	

}





程序结果:

输入: 

  • 9
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值