用C语言对一维数组排序,并输出已排好元素的原来位置
答案:6 悬赏:60 手机版
解决时间 2021-04-20 00:04
- 提问者网友:心牵心
- 2021-04-19 15:05
用C语言对一维数组排序,并输出已排好元素的原来位置
最佳答案
- 五星知识达人网友:鸠书
- 2021-04-19 15:32
方法1:比较笨的办法是先排好。再在里面找。看是原来的第几个。
方法2:有一个很快的方法,就是用快速排序排,
#include "stdio.h"//
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] 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");
}
全部回答
- 1楼网友:长青诗
- 2021-04-19 19:00
冒泡排序吧!!!
- 2楼网友:北城痞子
- 2021-04-19 17:58
用选择法排序,优化过的选择法。
先挑出5个数中的最大值,并记录其下标,将该数与第一位的数字交换,并将该下标存入c数组。然后挑出剩下n-1个数的最大值,记录下标存入c,并与第二个位置进行交换,以此类推。。。。
先挑出5个数中的最大值,并记录其下标,将该数与第一位的数字交换,并将该下标存入c数组。然后挑出剩下n-1个数的最大值,记录下标存入c,并与第二个位置进行交换,以此类推。。。。
- 3楼网友:神鬼未生
- 2021-04-19 17:49
#include
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
- 4楼网友:一秋
- 2021-04-19 16:27
方法1:比较笨的办法是先排好。再在里面找。看是原来的第几个。 (代码我就不写了。)
方法2:有一个很快的方法,就是用快速排序排,
如果你深入的了解了快排,那么这个就很简单了。而且效率很高。
我给你写代码。
方法2:有一个很快的方法,就是用快速排序排,
如果你深入的了解了快排,那么这个就很简单了。而且效率很高。
我给你写代码。
- 5楼网友:逐風
- 2021-04-19 16:01
简单的思路:
定义一个指针数组,找到b数组中元素在a数组中的地址,并存储在指针数组对应位置。
之后将指针数组内的地址值依次取出来与a数组首地址相减,得到的就是原来的位置。
利用的原理:数组内地址是连续的!
#include
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} ",c[0],c[1],c[2],c[3],c[4]);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯