如何将一串整形数组排序输出,并输出原来的序号,用C语言
时间: 2024-12-18 20:19:44 浏览: 7
在C语言中,你可以使用标准库函数`qsort()`结合结构体和指针来同时排序数组并记录原始序号。这里是一个简单的例子,假设有一个整数数组`nums`和相应的索引数组`indices`:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义结构体,包含数字和对应的序号
typedef struct {
int value;
int index;
} Item;
// 比较函数,用于qsort()
int compare(const void *a, const void *b) {
Item *itemA = (Item *) a;
Item *itemB = (Item *) b;
return itemA->value - itemB->value; // 按数值大小升序排列
}
void sort_and_print(int nums[], int indices[], int size) {
// 创建一个临时数组,存放排序后的元素和它们的索引
Item arr[size];
for (int i = 0; i < size; i++) {
arr[i].value = nums[i];
arr[i].index = i;
}
// 使用qsort()对临时数组进行排序
qsort(arr, size, sizeof(Item), compare);
// 输出排序后的数组和原索引
for (int i = 0; i < size; i++) {
printf("Sorted value: %d, Original index: %d\n", arr[i].value, arr[i].index);
}
}
int main() {
int nums[] = {5, 2, 8, 1, 9};
int indices[] = {0, 1, 2, 3, 4};
int size = sizeof(nums) / sizeof(nums[0]);
sort_and_print(nums, indices, size);
return 0;
}
```
当你运行这个程序时,它会按照数值大小对`nums`数组进行排序,并同时显示每个元素的原始索引。
阅读全文