输入一系列的数,先进行排序,然后我不会的点在于排序后如何输出每个元素的原来次序
2条回答 默认 最新
关注要解决这个问题,你可以采用以下步骤:
存储原始索引:在排序之前,将每个元素的原始索引与其值一起存储。这可以通过创建一个包含元素值和其原始索引的元组列表来实现。
排序:对这个列表进行排序,排序仅基于元素的值。
输出原始索引:排序后,列表中每个元组的第二个元素(原始索引)将代表该元素在原始列表中的位置。
举个例子,假设你有一个数列
[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语言编程环境中运行,以查看其工作原理。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报