我正在学习C ++,所以如果这是一个愚蠢的问题,请原谅我,但我已经有一段时间了。
我正在尝试使用插入排序对矢量进行部分排序。
这是功能:
template <typename T> // template, typename: pg 419
void insertion_sort (T *a, long int n) {
for (long int i = 1; i < n; i++) {
for (long int j = i; (j > 0) && (a[j] < a[j-1]); j--) {
std::swap(a[j], a[j-1]); // swap: pg 1294, 1297
}
}
}
这是我的合并功能代码:
template <typename T> void sort(vector<T> &a, vector<T> & aux, long int low, long int high) {
long int size = high - low + 1;
if (size < INSERTION_THRESHOLD) {
insertion_sort(a[low], (long int) a.size() - low);
}
else {
if (high <= low) {
return;
}
long int mid = low + (high - low)/2;
sort(a, aux, low, mid);
sort(a, aux, mid + 1, high);
merge(a, aux, low , mid, high);
}
}
以下是我在编译时遇到的错误:
sort.cpp: In instantiation of ‘void sort(std::vector<T>&, std::vector<T>&, long int, long int) [with T = double]’:
sort.cpp:147:82: required from here
sort.cpp:71:51: error: no matching function for call to ‘insertion_sort(__gnu_cxx::__alloc_traits<std::allocator<double> >::value_type&, long int)’
insertion_sort(a[low], (long int) a.size() - low);
^
sort.cpp:71:51: note: candidates are:
In file included from sort.cpp:6:0:
sort.hpp:11:28: note: template<class T> void insertion_sort(T*, long int)
template <typename T> void insertion_sort (T *a, long int n)
任何帮助表示赞赏!