永发信息网

c语言,数组排序,返回序号

答案:5  悬赏:30  手机版
解决时间 2021-03-21 04:33
  • 提问者网友:姑娘长的好罪过
  • 2021-03-21 01:36
c语言,数组排序,返回序号
最佳答案
  • 五星知识达人网友:一秋
  • 2021-03-21 03:09
思路:在数值进行排序时,下标也同时移动。这就要求二者要联动。为此创建一个PAIR结构体,将此二者关联在一起。用库里的快排函数qsort可以省略排序的麻烦,并指定qsort按PAIR中数值大小为标准排序结构体数组,这样排序结果中的结构体数组下标和值还是保持开始时的对应关系。
#include
#include
#include
#define N 8
typedef struct
{
int cj;//数值
int px;//下标
}PAIR;
//qsort的辅助比较函数
int compare(const void *p, const void *q)
{
PAIR t1= *(PAIR* )p;
PAIR t2= *(PAIR* )q;
return(t1.cj>t2.cj);
}
int main()
{
PAIR a[N]={};
int cj[N]={};
int px[N]={};
printf("请输入%d个整数:", N);
for (int i=0;i{
scanf("%d",&(a[i].cj));
a[i].px=i+1;
//数组
cj[i] = a[i].cj;
px[i] = a[i].px;
}
qsort((void *)a,N, sizeof(PAIR), compare);
printf("
排好序的整数为:");
for (i=0;i{
printf("%d ",a[i].cj);
cj[i]=a[i].cj;
}
printf("
对应原来的下标:");
for (i=0;i{
printf("%d ",a[i].px);
px[i] = a[i].px;
}
putchar("
");
return 0;
}
全部回答
  • 1楼网友:不想翻身的咸鱼
  • 2021-03-21 08:32
1686095542
  • 2楼网友:孤独入客枕
  • 2021-03-21 07:02
#include
#include
int px[8]={0};
void sortindex(int a[],int n)
{
int *p;
int temp;
p=(int*)malloc(sizeof(int)*n);
for(int i=0;i p[i]=i;
for(i=0;i for(int j=0;j if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
for(i=0;i<8;i++)
px[8-i-1]=p[i];
free(p);
}
void main()
{
int cj[8]={12,2,31,231,0,123,679,790};
for(int i=0;i<8;i++)
printf("%d\t",cj[i]);
printf("\n");
sortindex(cj,8);
for(i=0;i<8;i++)
printf("%d\t",px[i]);
printf("\n");
}
  • 3楼网友:躲不过心动
  • 2021-03-21 05:57
经典的办法,是依次取cj的数据做关键字,依次插入px数组。
比较简单的办法,从cj数组中取最大值,得到序号,写入px数据的第一个位置,然后,清除对应的cj的数据,或者说给它赋一个最小的可能值。然后,第二次,依然取最大值。。。这种做法比较次数较多,但没有数据的移动。缺点是会丢失cj的原始数据,这个可以通过复制一个cj数组来解决。
  • 4楼网友:神也偏爱
  • 2021-03-21 04:29
#include "stdio.h"
void main()
{
int cj[8],px[8],temp[8],m;
for (int i=0;i<8;i++)
{
scanf("%d",cj+i);
temp[i] = cj[i];
px[i] = i;
}
int iMax,vMax;
for (i=0;i<8;i++)
{
iMax = i;
vMax = temp[i];
for (int j=i;j<8;j++)
{
if (temp[j]>vMax)
{
iMax = j;
vMax = temp[j];
}
}
m = temp[i];
temp[i] = temp[iMax];
temp[iMax] = m;
m = px[i];
px[i] = px[iMax];
px[iMax] = m;
}
for (i=0;i<8;i++)
{
printf("%d ",temp[i]);
}
printf("\n");
for (i=0;i<8;i++)
{
printf("%d ",px[i]);
}
printf("\n");
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯