我举个简单例子,一个一维数组int a[5]={3, 8, 4, 7, 6}
按降序排列以后是int b[5]={8, 7, 6, 4, 3}
最大的元素8在原来的数组中是第二位,7是第四位,等等
得到一个表示原来位置的数组int c[5]={2, 4, 5, 3, 1}
用C语言编程实现,简单讲一下思路即可
多谢帮助!满意答案有加分
简单的思路:
定义一个指针数组,找到b数组中元素在a数组中的地址,并存储在指针数组对应位置。
之后将指针数组内的地址值依次取出来与a数组首地址相减,得到的就是原来的位置。
利用的原理:数组内地址是连续的!
#include <stdio.h>int main()
{
int a[5]={3, 8, 4, 7, 6}, b[5]={8, 7, 6, 4, 3},c[5],i,j,*p[5];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(b[i]==a[j])
p[i]=&a[j];
}
}
for(i=0;i<5;i++)
c[i]=p[i]-&a[0]+1;
printf("原来的位置数组c[5]={%d,%d,%d,%d,%d}\n",c[0],c[1],c[2],c[3],c[4]);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2018-02-28
/*我举个简单例子,一个一维数组int a[5]={3, 8, 4, 7, 6}
按降序排列以后是int b[5]={8, 7, 6, 4, 3}
最大的元素8在原来的数组中是第二位,7是第四位,等等
得到一个表示原来位置的数组int c[5]={2, 4, 5, 3, 1}*/
#include<stdio.h>
void main()
{
int i,j,k=0;
int a[5]={3, 8, 4, 7, 6};
int b[5]={8, 7, 6, 4, 3};
int c[5] = {0};
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
if (b[i]==a[j])
{
c[k++] = j+1; //因为说的是第几位而不是下标 所以加1
break;
}
}
}
for (i=0;i<5;i++)
{
printf("%d ",c[i]);
}
}
2 4 5 3 1 Press any key to continue
按降序排列以后是int b[5]={8, 7, 6, 4, 3}
最大的元素8在原来的数组中是第二位,7是第四位,等等
得到一个表示原来位置的数组int c[5]={2, 4, 5, 3, 1}*/
#include<stdio.h>
void main()
{
int i,j,k=0;
int a[5]={3, 8, 4, 7, 6};
int b[5]={8, 7, 6, 4, 3};
int c[5] = {0};
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
if (b[i]==a[j])
{
c[k++] = j+1; //因为说的是第几位而不是下标 所以加1
break;
}
}
}
for (i=0;i<5;i++)
{
printf("%d ",c[i]);
}
}
2 4 5 3 1 Press any key to continue
第2个回答 推荐于2017-11-23
方法1:比较笨的办法是先排好。再在里面找。看是原来的第几个。 (代码我就不写了。)
方法2:有一个很快的方法,就是用快速排序排,
如果你深入的了解了快排,那么这个就很简单了。而且效率很高。
我给你写代码。本回答被提问者采纳
方法2:有一个很快的方法,就是用快速排序排,
如果你深入的了解了快排,那么这个就很简单了。而且效率很高。
我给你写代码。本回答被提问者采纳
第3个回答 推荐于2016-07-25
方法1:比较笨的办法是先排好。再在里面找。看是原来的第几个。
方法2:有一个很快的方法,就是用快速排序排,
#include ""//
void main(void){
int a[6]={8,5,2,7,9,4},b[6],c[6],i,j,x;
for(i=0;i<6;c[i]=1+i++)
printf("%d ",b[i]=a[i]);
printf("\n");
for(i=0;i<6;i++){
for(x=i,j=x+1;j<6;j++)
if(b[x]<b[j]) x=j;
if(x!=i){
j=b[i];
b[i]=b[x];
b[x]=j;
j=c[i];
c[i]=c[x];
c[x]=j;
}
}
for(i=0;i<6;printf("%d ",b[i++]));
printf("\n");
for(i=0;i<6;printf("%d ",c[i++]));
printf("\n");
}
第4个回答 2010-11-14
用选择法排序,优化过的选择法。
先挑出5个数中的最大值,并记录其下标,将该数与第一位的数字交换,并将该下标存入c数组。然后挑出剩下n-1个数的最大值,记录下标存入c,并与第二个位置进行交换,以此类推。。。。
先挑出5个数中的最大值,并记录其下标,将该数与第一位的数字交换,并将该下标存入c数组。然后挑出剩下n-1个数的最大值,记录下标存入c,并与第二个位置进行交换,以此类推。。。。