用C语言对一维数组排序,并输出原来的位置

我举个简单例子,一个一维数组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语言边啊?

可以先用冒泡排序对数组进行排序,然后对排序的数组进行遍历,找出其在排序之前数组中的位置,参考代码如下:

#include<stdio.h>
#include<string.h>
#define N 5
int main()
{
int a[N],b[N],c[N],i,j,temp;
for(i=0;i<N;i++){//输入数组,并用b保存数组a的值 
scanf("%d",&a[i]);
b[i]=a[i];
}
for(i=0;i<N-1;i++)//对a从大到小冒泡排序 
for(j=0;j<N-i-1;j++)
if(a[j]<a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}

for(i=0;i<N;i++)//输出排序后的a 
printf("%d ",a[i]);
printf("\n");

for(i=0;i<N;i++)//遍历找出以前的位置 
for(j=0;j<N;j++){
if(a[i]==b[j])
c[i]=j;
}

for(i=0;i<N;i++)//输出位置数组 
printf("%d ",c[i]+1);
printf("\n");
return 0;
}
/*
运行结果:
3 8 4 7 6
8 7 6 4 3
2 4 5 3 1
*/
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-09
看看行不行?
#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]<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");
}本回答被提问者采纳
第2个回答  2013-03-09
#include <stdio.h>
void main()
{ int a[5]={3,8,4,7,6},b[5],c[5],max,i,j,k;
for(i=0;i<5;i++)
b[i]=a[i];
for(i=0;i<5;i++)
{max=a[i];
for(j=i+1;j<5;j++)
if(a[j]>max)
{max=a[j];
k=j;}
a[k]=a[i];
a[i]=max;
}
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(b[j]==a[i])
c[i]=j;
for(i=0;i<5;i++)
printf("%d\t",a[i]);
printf("\n");
for(i=0;i<5;i++)
printf("%d\t",b[i]);
printf("\n");
for(i=0;i<5;i++)
printf("%d\t",c[i]);
printf("\n");
}
第3个回答  2018-11-15
冒泡排序法实现,参考代码如下:
#include "stdio.h"
#define N 10
int main( )
{
int i,j,t;
int d[N]={25,47,68,114,77,35,75,24,110,88};
for(i=0;i<N;++i)
printf("%d ",d[i]);
printf("\n");
for(i=0;i<N;++i)
for(j=0;j<N-i-1;++j)
if(d[j]>d[j+1]){
t=d[j];
d[j]=d[j+1];
d[j+1]=t;
}
for(i=0;i<N;++i)
printf("%d ",d[i]);
return 0;
}

用C语言对一维数组排序,并输出原来的位置
b[N],c[N],i,j,temp;for(i=0;i<N;i++){\/\/输入数组,并用b保存数组a的值 scanf("%d",&a[i]);b[i]=a[i];}for(i=0;i<N-1;i++)\/\/对a从大到小冒泡排序 for(j=0;j<N-i-1;j++)if(a[j]<a[j+1]){temp=a[j];...

用C语言对一维数组排序,并输出原来的位置
冒泡排序法实现,参考代码如下:include "stdio.h"define N 10 int main( ){ int i,j,t;int d[N]={25,47,68,114,77,35,75,24,110,88};for(i=0;i<N;++i)printf("%d ",d[i]);printf("\\n");for(i=0;i<N;++i)for(j=0;j<N-i-1;++j)if(d[j]>d[j+1]){ t=d[...

用C语言对一维数组排序,并输出原来的位置
b[N],c[N],i,j,temp; for(i=0;i<N;i++){\/\/输入数组,并用b保存数组a的值 scanf("%d",&a[i]); b[i]=a[i]; } for(i=0;i<N-1;i++)\/\/对a从大到小冒泡排序 for(j=0;j<N-i-1;j++) if(a[j]...

C语言(简单的)编写程序输入一维整形数组a[10],将其按由小到大排序后输 ...
这个应该用起泡法排序算法。include<stdio.h> int main(){ int a[10];int i,j,k;printf("input 10 numbers:\\n");for(i=0;i<10;i++){\/\/输入十个数,一次循环输入10次 scanf("%d",&a[i]);printf("\\n");\/\/换行 for(j=0;j<9;j++)\/\/从小到大换行经典方法四行 for(i=0;i<...

C语言中怎样实现一维数组的倒序输出
实现一维数组的倒序输出,在C语言中可通过交换数组元素的位置,使得原本处于数组开头的元素移动到最后,其余元素依次前移,以此达到倒序输出的效果。下面以一个示例来说明如何操作。首先,定义一维数组arr,包含字符元素{'9','4','2','7','5'}。然后定义整型变量i, j, p。变量i用于遍历数组,变量j...

用C语言如何使用函数调用来做一维数组排序?谢谢了
\/\/ 按增量序列dlta[0..t-1]对顺序表L作希尔排序 int dlta[6] = {50,25,12,6,3,1};for (int k = 0; k < 6; ++k)ShellInsert(L, dlta[k]);} \/\/ ShellSort Partition(int L[], int low, int high) { \/\/ 交换顺序表L中子序列L.r[low..high]的记录,使枢轴记录到位,...

c语言中,用一维数组排序十个整数,怎么做
int main(){ int i,j,min,t,a[10]={2,4,8,3,6,9,7,222,64,88};printf("排序前的序列为:\\n");for(i=0;i<10;i++)\/\/输出排序前的序列 { printf("%5d",a);} printf("\\n");for(i=0;i<9;i++){ min=i;\/\/把每次循环的第一个数作为最小值 for(j=i+1;j<10;j+...

编写C语言程序,查找一个一维数组中的最大值,打印出该元素及其位置。
include <stdio.h> int main(void){ int a[5],j,i,k;puts("输入数值 以空格间隔");for(i=0;i<5;i++)scanf("%d",&a[i]);j=a[0];for(i=1;i<5;i++){ if (a[i]>j){j=a[i];k=i;} } printf("最大数为=%d 是第%d个元素",j,k);} ...

C语言:随机生成一个长度为15的一维数组,将奇数元素移到数组前面并将数组...
include "stdio.h"include "stdlib.h"include "time.h"define N 15 int main(int argc,char *argv[]){ int a[N],i,j,k;srand((unsigned)time(NULL));for(i=0;i<N;i++)\/\/数组随机赋值 printf("%3d",a[i]=rand()%100);printf("\\n\\nAfter processing:\\n");for(i=0;i<N;i...

用C语言如何将一个一维数组中的元素随机排序
include include include intmain(){ inti,j,n,k,t,a[100];srand((unsigned)time(NULL));

相似回答