嘿所有,我正在尝试编写一个排序函数,但我很难弄清楚如何初始化一个值,并使这个函数作为通用模板工作。排序依据:
在A [ii]> A [jj]找到一对=(ii,jj)=最小值= ii + jj = 如果存在这样的一对,那么 交换A [ii]和A [jj]否则 打破;
我写的函数如下:
template <typename T>
void sort(T *A, int size)
{
T min =453;
T temp=0;
bool swapper = false;
int index1 = 0, index2 = 0;
for (int ii = 0; ii < size-1; ii++){
for (int jj = ii + 1; jj < size; jj++){
if((min >= (A[ii]+A[jj])) && (A[ii] > A[jj])){
min = (A[ii]+A[jj]);
index1 = ii;
index2 = jj;
swapper = true;
}
}
}
if (!swapper)
return;
else
{
temp = A[index1];
A[index1] = A[index2];
A[index2] = temp;
sort(A,size);
}
}
此函数将成功对整数数组进行排序,但不会对字符数组进行排序。 我不知道如何正确初始化比较开始的最小值。我尝试通过简单地将数组的前两个元素一起添加来初始化值(min = A [0] + A [1]),但在我看来,对于这个算法它会失败。我知道这是一种奇怪的类型,但它是测试的练习,所以感谢任何输入。
答案 0 :(得分:2)
最可能的原因是它失败了,是因为char = 453
不会产生453而是产生相当不同的数字,这取决于char是什么(有符号和无符号)。您的直接解决方案是使用numeric_limits,http://www.cplusplus.com/reference/std/limits/numeric_limits/
您可能还需要考虑设计,因为char的范围很小,添加两个字符时可能会经常溢出。
答案 1 :(得分:1)
任何类型的最大值为std::numeric_limits<T>::max()
。它在<limits>
中定义。
另外,考虑重新设计。这不是一个好的算法。在递归调用sort
函数之前,我会确保我知道自己在做什么。
答案 2 :(得分:0)
我没有花太多时间阅读你的算法,但作为std::numeric_limits
的替代,你可以使用数组中的初始元素作为初始最小值。然后,如果使用不专门化std::numeric_limits
的类调用函数,则不必担心会发生什么,因此无法报告最大值。