开发者社区> 问答> 正文

c语言的排序算法 一个数组中的数据排序 但是要求排完序之后 新的顺序用原来的那种标号来表示

比如 a[0]=2,a[1]=1,a[2]=0.从小到大排序后的顺序是 a[2] a[1] a[0].

展开
收起
知与谁同 2018-07-21 15:01:06 2470 0
3 条回答
写回答
取消 提交回答
  • 另开一个数组...专门用来记录下标的变化,原数组怎么动了,下标跟着动。
    2019-07-17 22:50:06
    赞同 展开评论 打赏
  • 云栖社区聚能聊、问答管理员~发福利、搞怪,八卦我来,论技术、发话题、写博客你上!
    使用结构体,定义值和下标2个成员,或者2维数组array[n][2]..array[n][0]表示值,array[n][1]表示之前的下标,然后整体排序。
    2019-07-17 22:50:05
    赞同 展开评论 打赏
  • 这个时候,玄酱是不是应该说点什么...
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    #define size 10
    struct temp{
    int number;
    int index;
    };
    int main()
    {
    int s[size];
    //通过随机数得到数组的初始值
    srand(time(NULL));
    struct temp tmp[size];
    for (int i=0;i < size; i++) {
    s[i] = rand() % 100;
    tmp[i].number = s[i];
    tmp[i].index = i;
    }
    printf("输入的数组是:\n");
    for ( i=0;i <size; i++) {
    printf(" %d ", s[i]);
    }

    for (int j=0;j <size;j++) {
    for (int i=size-2;i >= j;i--)
    if (s[i] > s[i+1])
    {
    int t=s[i];
    s[i]=s[i+1];
    s[i+1]=t;

    temp tt = tmp[i];
    tmp[i] = tmp[i+1];
    tmp[i+1] = tt;
    }
    }
    printf("\n数组排序后\n");
    for ( i=0;i < size;i++)
    printf(" %d ",s[i]);
    printf("\n排序后的数组下标值:\n");
    for ( i=0;i < size;i++)
    printf(" %d ",tmp[i].index);

    return 0;
    }
    2019-07-17 22:50:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载