| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3170 人关注过本帖
标题:数组排序 原来的位置
只看楼主 加入收藏
yakic
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-4-8
结帖率:71.43%
收藏
已结贴  问题点数:10 回复次数:9 
数组排序 原来的位置
有一组数,(1)要输出排序后各个数,(2)还输出各个数原来的位置,共是两行
排序用冒泡我知道,但是输出每个数原来的位置该 怎么弄呀,帮忙一下??谢谢啦
搜索更多相关主题的帖子: 冒泡 
2011-04-08 18:12
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
我这个汗。。。

你搞两个数组,a[], b[]。
读取数组 a 以后,把所有元素复制到 b 里头,然后对 a 进行排序。
要输出原来的顺序只要输出 b 数组就可以了。
2011-04-08 18:17
w123012306
Rank: 9Rank: 9Rank: 9
来 自:湖南
等 级:蜘蛛侠
威 望:4
帖 子:307
专家分:1180
注 册:2010-4-22
收藏
得分:0 
先标记排序前数组的每个元素~!!!排序后在输出

楼上,楼下的一定要幸福开心哦!
2011-04-08 18:43
痴痴颠颠
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2011-4-6
收藏
得分:0 
没什么好的思路呢,定义数组a和数组b,a和b的数相同。
a数组排序输出,然后a数组一一的去和b数组对比,找出
位置。
有没好点的思路呢,高手指点下,谢谢喽!

耐得住寂寞,经得起挫折,做得出选择,拼的出结果!
2011-04-08 19:54
zhaxi0927
Rank: 2
来 自:buct
等 级:论坛游民
帖 子:13
专家分:15
注 册:2011-4-7
收藏
得分:0 
2楼对题目理解有误吧,4楼的太麻烦。定义数组a和数组b,a中存放排序的数据,b中b[i]=i;然后排序。只不过排序的时,每次交换a中的两个数的时候,对应位置的b数组中的两个数也交换位置,这样b数组中的元素就是a数组中数之前在数组中的位置。

Be strong!
2011-04-08 20:11
zhaxi0927
Rank: 2
来 自:buct
等 级:论坛游民
帖 子:13
专家分:15
注 册:2011-4-7
收藏
得分:0 
//附上代码
#include<conio.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int Max=10;
int main()
{
    int a[Max],b[Max],i,j;
    for(i=0;i<Max;i++)
    {
        cin>>a[i];
        b[i]=i;
    }   
    for(i=0;i<Max-1;i++)//冒泡法从小到大排序
    {
        for(j=i+1;j<Max;j++)
        {
            if(a[i]>a[j])
            {
                //下面三行,交换a[i]和a[j],这种方法可以不用另外开辟一个空间
                a[i]=a[i]+a[j];
                a[j]=a[i]-a[j];
                a[i]=a[i]-a[j];
               
                //下面三行,交换b[i]和b[j],这种方法可以不用另外开辟一个空间
                b[i]=b[i]+b[j];
                b[j]=b[i]-b[j];
                b[i]=b[i]-b[j];
            }   
        }   
    }  
    for(i=0;i<Max;i++)cout<<a[i]<<"("<<b[i]<<")"<<"\t";   
    cout<<endl<<"括号内数组a重元素之前在数组中的位置"<<endl;
    getch();
    return 0;
}   

Be strong!
2011-04-08 20:24
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
如果学过结构体,用结构体数组更直观。结构体包含两个成员:(  序号,数据)按数据给数组排序。
2011-04-08 20:31
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
楼上和我想的一样

                                         
===========深入<----------------->浅出============
2011-04-08 20:52
yakic
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-4-8
收藏
得分:0 
回复 6楼 zhaxi0927
有没有更简单的呀,你这个我有点看不来
2011-04-08 20:55
zhaxi0927
Rank: 2
来 自:buct
等 级:论坛游民
帖 子:13
专家分:15
注 册:2011-4-7
收藏
得分:10 
回复 9楼 yakic
//这里我改了一下for循环可能容易懂一点
int t;
for(i=0;i<Max-1;i++)//冒泡法从小到大排序
    {
        for(j=i+1;j<Max;j++)
        {
            if(a[i]>a[j])
            {
                t=a[i];
                a[i]=a[j];   
                a[j]=t;

                t=b[i];
                b[i]=b[j];
                b[j]=t;//这里要做的只是要保证数组a和b同步变换
            }   
        }

另外,他们说的结构体也可以,但是这里感觉没必要

Be strong!
2011-04-09 12:02
快速回复:数组排序 原来的位置
数据加载中...
 
   



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

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