C ++ QuickSorting一个向量并保留原始索引号

时间:2014-12-06 04:49:06

标签: c++ vector quicksort

我有一个有效的快速排序功能,但我不确定如何保留未排序数据的原始索引号。有任何想法吗?谢谢!这是我的功能。我能以某种方式在那里加入一对吗?

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

我想打印出索引号。对不起,我无法弄清楚如何格式化,以便数字与数据对齐,但我想你明白了。

1 个答案:

答案 0 :(得分:1)

  1. std::vector<T>转换为std::vector<std::pair<int, T>>
  2. 使用std::vector<std::pair<int, T>>
  3. 中的第二个对pair进行排序