11月17日问题 A: 带位置的排序

本文介绍了一种使用C语言实现的针对一组非负数进行排序的方法,并记录每个元素在原始序列中的位置。通过冒泡排序算法,确保了相同数值的元素保持其原有的相对顺序,最终输出排序后的数列及其对应位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

一组以负数结尾的非负数数列,按从小到大排序。输出排序后的数列及其元素在原数列中的位置。若数值相等,则先出现的在前。

输入

一组以负数结尾的非负数(不超过100个)

输出

输出排序后的数列及其元素在原数列中的位置,位置从1开始。

样例输入

10 8 20 9 30 5 40 8 40 7 30 5 -1

样例输出

5(6) 5(12) 7(10) 8(2) 8(8) 9(4) 10(1) 20(3) 30(5) 30(11) 40(7) 40(9)

重点:在不确定的情况下怎么样读数组,用while语句,里面i++,即可得到输入多少个数组

    int a[110],b[110],n,i=0;
	while(scanf("%d",&n)==1&&n>=0){
		b[i]=i+1;
		a[i]=n;
		i++;
	}

另外,用冒泡排序,用两个数组,a【110】,b【110】即可获得一个序号,一个内容 

#include <stdio.h>
int main(){
	int a[110],b[110],n,i=0;
	while(scanf("%d",&n)==1&&n>=0){
		b[i]=i+1;
		a[i]=n;
		i++;
	}
	for(int j=0;j<i-1;j++){
		for(int z=0;z<i-1;z++){
			int temp;
			if(a[z]>a[z+1]){
				temp=a[z];
				a[z]=a[z+1];
				a[z+1]=temp;
				temp=b[z];
				b[z]=b[z+1];
				b[z+1]=temp;
			}
		}
	}
	for(int j=0;j<i;j++){
		printf("%d(%d) ",a[j],b[j]);
	}	
}

发给自己看的哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值