| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 502 人关注过本帖, 1 人收藏
标题:关于数在数组中的位置
只看楼主 加入收藏
baichizhu911
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-2-19
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:7 
关于数在数组中的位置
题目是随意写出一个10个数字的数组吗,要输出排序好以后的数组跟每个元素在原来序列中的位置。
样例输入
1 2 3 5 4 6 8 9 10 7
样例输出
1 2 3 4 5 6 7 8 9 10
1 2 3 5 4 6 10 7 8 9

怎么把数组的位置保存下来。脑子越想越乱,就是想不通。。大家帮忙帮我通一下!
搜索更多相关主题的帖子: 元素 
2014-02-19 19:28
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:3 
用另一个数组来配合啊

定义 a[10]={1,2,3,4,5,6,7,8,9,10};  来表示顺序

排序,你需要对原数组进行元素调配,就是调换位置;所以当你对原数组进行操作时同时对 a[] 进行相同的操作,
这样不就把原数组元素与顺序位置绑定了嘛

核心代码:
程序代码:
    int a[10]={1,2,3,5,4,8,7,6,10,9};
    int b[10]={1,2,3,4,5,6,7,8,9,10};
    int i,j,temp;
    for(i=0;i<10;i++)
        for(j=i;j<10;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;
            }


图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 韶志 于 2014-2-19 21:24 编辑 ]

三十年河东,三十年河西,莫欺少年穷!
2014-02-19 21:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:3 
程序代码:
#include <stdio.h>
#include <stdlib.h>

int compare( const void* a, const void* b )
{
    return *(int*)a - *(int*)b;
}

int main(void)
{
    // 输入
    const int arr[] = { 1, 2, 3, 5, 4, 6, 8, 9, 10, 7 };

    // 构建一个包含原始位置的数组
    const size_t n = sizeof(arr)/sizeof(arr[0]);
    int* buf = malloc( n*2*sizeof(int) );
    for( size_t i=0; i!=n; ++i )
    {
        buf[2*i+0] = arr[i];
        buf[2*i+1] = i;
    }
    // 排序
    qsort( buf, n, 2*sizeof(int), &compare );
    // 输出结果
    for( size_t i=0; i!=n; ++i )
        printf( "%d%c", buf[2*i+0], " \n"[i+1==n] );
    for( size_t i=0; i!=n; ++i )
        printf( "%d%c", buf[2*i+1]+1, " \n"[i+1==n] );
    free( buf );

    return 0;
}
2014-02-20 08:31
xp0213
Rank: 7Rank: 7Rank: 7
来 自:湖北武汉
等 级:黑侠
威 望:1
帖 子:222
专家分:524
注 册:2011-10-26
收藏
得分:3 
我也写了一个,但是执行效率很低,就不贴出来了,
2014-02-20 16:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct Data
{
    int value;
    int order;
};

const int arr[] = { 1, 2, 3, 5, 4, 6, 8, 9, 10, 7 };

void create_data_array(Data* data, const int* source);
void display_data(const Data* data, int count);
void swap_data(Data* d1, Data* d2);

int main(void)
{
    Data data[_countof(arr)];

    create_data_array(data, arr);
    for (int i = 0; i < _countof(data) - 1; ++i)
    {
        for (int j = i + 1; j < _countof(data); ++j)
        {
            if (data[i].value > data[j].value)
            {
                swap_data(&data[i], &data[j]);
            }
        }
    }
    display_data(data, _countof(data));

    printf_s("\npress any key to exit...");
    _getch();
    return EXIT_SUCCESS;
}

void create_data_array(Data* data, const int* source)
{
    for (int index = 0; index < _countof(arr); ++index)
    {
        data[index].value = source[index];
        data[index].order = index + 1;
    }
}

void display_data(const Data* data, int number)
{
    for (int index = 0; index < number; ++index)
    {
        printf_s("%4d ", data[index].value);
    }
    putchar('\n');
    for (int index = 0; index < number; ++index)
    {
        printf_s("%4d ", data[index].order);
    }
    putchar('\n');
}

void swap_data(Data* d1, Data* d2)
{
    Data temp;

    temp = *d1;
    *d1 = *d2;
    *d2 = temp;
}

不要爲實現而實現,與其把數據弄到支離破碎地實現出效果,不如學會捆綁數據。除了出現一個結構體,哪一個知識點沒學過?

[ 本帖最后由 TonyDeng 于 2014-2-21 02:28 编辑 ]

授人以渔,不授人以鱼。
2014-02-21 02:21
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:3 
回复 楼主 baichizhu911
#include<iostream>
#include<string>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct num
{
    int x;
    int order;
};
int main(void)
{
  struct num Num[10],*p[10];
 for(int i=0;i<10;++i)
 { p[i]=&Num[i];}
  for(int i=0;i!=10;++i)
  {
     cin>>(*p[i]).x;
     (*p[i]).order=i;
  }
  int t;
  for(int i=0;i!=9;++i)
   for(int j=i+1;j!=10;++j)
    {
       if((*p[i]).x>(*p[j]).x)
         { t=(*p[i]).x;
         (*p[i]).x=(*p[j]).x;
         (*p[j]).x=t;
          t=(*p[i]).order;
          (*p[i]).order=(*p[j]).order;
          (*p[j]).order=t;
        }
    }

  for(int i=0;i!=10;++i)
   cout<<(*p[i]).x<<" "<<(*p[i]).order<<endl;
   return 0;
}

想抽苏烟了。
2014-02-21 03:26
去年丶夏天
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:28
注 册:2014-2-19
收藏
得分:3 
#include <stdio.h>

int main(void)
{
        int arr[2][10] ={ {0,0} };
        int i = 0 ,j = 0;
        printf("input number:\n");
        while( i < 10 )
        {
                scanf("%d",&arr[0][i]);
                arr[1][i] = i+1;
                i++;
        }
        for( i = 0; i < 9; i++ )
        {
                for( j = 0; j < 9-i; j++ )
                {
                        if( arr[0][j] > arr[0][j+1] )
                        {
                                arr[0][j] = arr[0][j] + arr[0][j+1];
                                arr[0][j+1] = arr[0][j] - arr[0][j+1];
                                arr[0][j] = arr[0][j] - arr[0][j+1];
                                arr[1][j] = arr[1][j] + arr[1][j+1];
                                arr[1][j+1] = arr[1][j] - arr[1][j+1];
                                arr[1][j] = arr[1][j] - arr[1][j+1];
                        }
                }
        }
        printf("********************result******************\n");
        for( i = 0; i < 2; i++ )
        {
                for( j = 0; j < 10; j++)
                        printf("%-5d",arr[i][j]);
                printf("\n");
        }
        return 0;
}
2014-02-21 15:46
panrui0512
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2014-1-11
收藏
得分:3 
你可以再定义另一个数组,先把这些复制到这个数组后,再排序输出
2014-02-21 20:02
快速回复:关于数在数组中的位置
数据加载中...
 
   



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

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