含有相等数据的一维数组排序 相等的数据也占据排序号,怎么排呢?
含有相等数据的一维数组排序 相等的数据也占据排序号如:1 5 2 1 4
按从小到大排序 应为 1 1 2 4 5
在原数组中的标号顺序应为:1 4 3 5 2
,该怎么实现呢?
测试程序如下:不太完善,没有将相等的数据排上序号,
如输入:1 5 2 1 4
按从小到大排序输出结果为 1 1 2 4 5(正确)
输出在原数组中的标号顺序为:1 1 3 5 2(不正确)
应该怎么修改呢?
或者别的思路也可以!
谢谢了
// 用C语言对一维数组排序,并输出原来的位置
#include<stdio.h>
#include<string.h>
#define N 5
int main()
{
float a[N],b[N],temp;
int i,j,c[N];
for(i=0;i<N;i++)
{//输入数组,并用b保存数组a的值
scanf("%5f",&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("%5.2f ",a[i]);
printf("\n");
for(i=0;i<N;i++)//遍历找出以前的位置 ,如果以前的数组中有相等的数呢?
for(j=0;j<N;j++)
{
if(a[i]==b[j])
{
c[i]=j;
break;//跳出本层循环
}
}
for(i=0;i<N;i++)//输出位置数组
printf("%d ",c[i]+1);
printf("\n");
return 0;
}
[此贴子已经被作者于2019-2-2 20:23编辑过]