白云爱吃糖是一个菜鸟呀 2023-11-26 23:01 采纳率: 50%
浏览 13
已结题

排序之后如何输出元素对应的原来次序

输入一系列的数,先进行排序,然后我不会的点在于排序后如何输出每个元素的原来次序

  • 写回答

2条回答 默认 最新

  • 晓雨的笔记本 新星创作者: python技术领域 2023-11-26 23:06
    关注

    要解决这个问题,你可以采用以下步骤:

    1. 存储原始索引:在排序之前,将每个元素的原始索引与其值一起存储。这可以通过创建一个包含元素值和其原始索引的元组列表来实现。

    2. 排序:对这个列表进行排序,排序仅基于元素的值。

    3. 输出原始索引:排序后,列表中每个元组的第二个元素(原始索引)将代表该元素在原始列表中的位置。

    举个例子,假设你有一个数列 [4, 2, 3, 1]。首先,你创建一个元组列表 [(4, 0), (2, 1), (3, 2), (1, 3)],其中第一个元素是数列的值,第二个元素是其在原始列表中的索引。然后,对这个列表进行排序,得到 [(1, 3), (2, 1), (3, 2), (4, 0)]。最后,你可以输出每个元组的第二个元素,这将是 [3, 1, 2, 0],代表每个排序后的元素在原始列表中的位置。

    我们可以用C语言来实现这个功能。以下是一个简单的程序,用于演示如何存储每个元素的原始位置,对数组进行排序,然后输出每个元素的原始索引。

    #include <stdio.h>
    #include <stdlib.h>
    
    // 定义一个结构体来保存值和原始索引
    typedef struct {
        int value;
        int originalIndex;
    } Element;
    
    // 比较函数,用于qsort
    int compare(const void *a, const void *b) {
        Element *elementA = (Element *)a;
        Element *elementB = (Element *)b;
        return elementA->value - elementB->value;
    }
    
    int main() {
        int array[] = {4, 2, 3, 1}; // 原始数组
        int length = sizeof(array) / sizeof(array[0]);
    
        // 创建一个Element数组来保存值和原始索引
        Element elements[length];
        for (int i = 0; i < length; i++) {
            elements[i].value = array[i];
            elements[i].originalIndex = i;
        }
    
        // 使用qsort排序
        qsort(elements, length, sizeof(Element), compare);
    
        // 输出原始索引
        printf("原始索引顺序: ");
        for (int i = 0; i < length; i++) {
            printf("%d ", elements[i].originalIndex);
        }
        printf("\n");
    
        return 0;
    }
    

    这个程序首先定义了一个Element结构体来存储数组元素和它们的原始索引。然后,它创建了一个Element数组,并使用qsort函数对其进行排序。排序后,程序输出每个元素的原始索引。

    你可以将这段代码复制到C语言编程环境中运行,以查看其工作原理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月10日
  • 已采纳回答 12月2日
  • 创建了问题 11月26日