我有一个有效的快速排序功能,但我不确定如何保留未排序数据的原始索引号。有任何想法吗?谢谢!这是我的功能。我能以某种方式在那里加入一对吗?
double NearestNeighbor::partition(vector<double>& theList, double start, double end) {
int pivot = theList[end];
int bottom = start - 1;
int top = end;
bool notdone = true;
while (notdone) {
while (notdone) {
bottom += 1;
if (bottom == top) {
notdone = false;
break;
}
if (theList[bottom] > pivot) {
theList[top] = theList[bottom];
break;
}
}
while (notdone) {
top = top - 1;
if (top == bottom) {
notdone = false;
break;
}
if (theList[top] < pivot) {
theList[bottom] = theList[top];
break;
}
}
}
theList[top] = pivot;
return top;
}
// quickSort功能
double NearestNeighbor::quickSort(vector<double>& theList, double start, double end) {
if (start < end) {
double split = partition(theList, start, end); //recursion
quickSort(theList, start, split - 1);
quickSort(theList, split + 1, end);
} else {
return 0;
}
}
我计算了几个向量的点积,我试图打印10个最近的邻居。我可以对它们进行排序,但我的教授要求我们返回10个最近邻居的索引号,所以我试图弄清楚如何保留这些原始索引号。
例如:排序数据可能如下所示:
索引号:3 45 15 9 45
数据:10 14 17 30 35
我想打印出索引号。对不起,我无法弄清楚如何格式化,以便数字与数据对齐,但我想你明白了。
答案 0 :(得分:1)
std::vector<T>
转换为std::vector<std::pair<int, T>>
。std::vector<std::pair<int, T>>
。pair
进行排序
醇>