用C 语言 对数组A中的N(0<N<L00)个整数从小到大进行连续编号,要求不能改变数组A中元素的顺序

2024年11月23日 06:04
有3个网友回答
网友(1):

思路:
step1:
先将输入后的a数组复制到b数组中去
step2:
对b数组元素用起泡法由小到大排序
step3:
元素b[0]的大小标号为1,比较b[j+1]和b[j]的大小,如果b[j+1]>b[j],则标号大小
+1,如果b[j+1]==b[j],则标号不变,b[j]的标号放在数组b1中,由b1[j]记录元素
b[j]标号大小。
for(j=0;j{
if(b[j+1]>b[j]) b1[j+1]=b1[j]+1;
if(b[j+1]==b[j]) b1[j+1]=b1[j];
}
step4:
对数组a中元素进行标号时,可借用数组b中元素的标号。具体为:a[0]的标记:先找
到和a[0]相同的b[j](0<=j也是如此。
for(i=0;ifor(j=0;jif(a[i]==b[j]) a1[i]=b1[j];
程序如下
#include
main()
{
int i,j,k,n,t,a[102],b[102],a1[102],b1[102];
b1[0]=1;//编号从 1开始.数组a,b 中元素对应的下标 分别放在a1和b1中
printf("输入n\n");
scanf("%d",&n);
printf("输入%d个数\n",n);
for(k=0,i=0;k{
scanf("%d",a+k);b[i]=a[k];//保存到数组a中,复制到数组b中
}
for(i=0;ifor(j=0;j{
if(b[j]>b[j+1])
{t=b[j+1];b[j+1]=b[j];b[j]=t;}//起泡法对数组b元素排序
}
for(j=0;j{
if(b[j+1]>b[j]) b1[j+1]=b1[j]+1;
if(b[j+1]==b[j]) b1[j+1]=b1[j];
}
for(i=0;ifor(j=0;jif(a[i]==b[j]) a1[i]=b1[j];
for(i=0;iprintf("%d\t",a1[i]);
}

网友(2):

用二维数组,第一维表示序号,第二维表示内容,排序后序号变,内容不变,即可实现

网友(3):

#include
#define N 6
main()
{
int a[N],b[N],c[N],i,j,max;
printf("input numbers:\n");
for(i=0;i {scanf("%d",&a[i]);
b[i]=1;}
for(i=0;i for(j=0;j if(a[j] b[i]++;
for(i=0;i {for(j=0,max=0;j if(b[i]>b[j])
{if(b[j]>max)
max=b[j]; }
b[i]=max+1;}
for(i=0;i printf("%d\t",a[i]);
printf("\n");
for(i=0;i printf("%d\t",b[i]);
getch();
}