1.你把数组的下标也保存到一个结构体数组中,对原数组进行排序的同时,也对那个临时数组进行同样的调换,等目标数组排序好,你的下标数组自然也排好了。
2.例如:
struct
{
int data;
size_t index;
};
排序后的index依然不变。参考代码:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <cstdlib>
using namespace std;
struct element{
int data;
size_t index;
}array[10];
int compare(const void *a, const void *b)
{
return (*(const element*)a).data > (*(const element*)b).data;
}
int main()
{
int input[] = {56, 12, 1, 99, 1000, 234, 33, 55, 99, 812};
for (size_t i = 0; i < sizeof(input)/sizeof(input[0]); i++) {
array[i].data = input[i];
array[i].index = i + 1;
}
qsort(array, sizeof(input)/sizeof(input[0]), sizeof(array[0]), compare);
for (size_t i = 0; i < sizeof(input)/sizeof(input[0]); i++)
cout << array[i].data << "\t" << array[i].index << endl;
return 0;
}
1 3
12 2
33 7
55 8
56 1
99 4
99 9
234 6
812 10
1000 5