| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1877 人关注过本帖
标题:含有相等数据的一维数组排序 相等的数据也占据排序号,怎么排呢?
只看楼主 加入收藏
xuanyz11
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-1-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
含有相等数据的一维数组排序 相等的数据也占据排序号,怎么排呢?
含有相等数据的一维数组排序 相等的数据也占据排序号
如: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编辑过]

搜索更多相关主题的帖子: 相等 数据 排序 数组 for 
2019-02-02 19:50
了无此生
Rank: 3Rank: 3
来 自:粤地潮州
等 级:论坛游侠
威 望:3
帖 子:82
专家分:121
注 册:2018-11-14
收藏
得分:20 
程序代码:
#include <stdio.h>

#define N 5

int main (void)
{
    int a[N] = {0}, b[N] = {1, 2, 3, 4, 5}, i, j, temp;
    printf("请输入含%d个数的数组:", N);
    for (i = 0; i < N; i++) 
        scanf("%d", &a[i]);

    printf("原数组:");
    for (i = 0; i < N; i++)
        printf("%d ", a[i]);
    putchar('\n');
        
    for (i = 0; i < N-1; i++)            
        for (j = 0; j < N-1 - i; j++) {
            if (a[j] > a[j+1]) {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
                
                temp = b[j];
                b[j] = b[j+1];
                b[j+1] = temp;
            }
        }
    
    printf("排序后:");
    for (i = 0; i < N; i++)
        printf("%d ", a[i]);
    putchar('\n');
        
    printf("原位置:");
    for (i = 0; i < N; i++)
        printf("%d ", b[i]);
    putchar('\n');
    return 0; 
}


[此贴子已经被作者于2019-2-2 20:28编辑过]


睡不醒的学渣(^・ω・^ )
2019-02-02 20:22
xuanyz11
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-1-9
收藏
得分:0 
回复 2楼 了无此生
结果正确,但中间输出为什么那么多混乱字母呢,呵呵,先感谢了,我仔细研读一下

[此贴子已经被作者于2019-2-2 20:28编辑过]

2019-02-02 20:27
了无此生
Rank: 3Rank: 3
来 自:粤地潮州
等 级:论坛游侠
威 望:3
帖 子:82
专家分:121
注 册:2018-11-14
收藏
得分:0 
回复 3楼 xuanyz11
刚开始写完正确就直接复制粘贴,没留意到乱码
要找到原位置得在换的过程就记录下来,否则当遇到相同数字时就完了

[此贴子已经被作者于2019-2-2 20:32编辑过]


睡不醒的学渣(^・ω・^ )
2019-02-02 20:30
xuanyz11
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-1-9
收藏
得分:0 
回复 3楼 xuanyz11
感谢感谢
2019-02-02 20:31
快速回复:含有相等数据的一维数组排序 相等的数据也占据排序号,怎么排呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018711 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved