gpt4 book ai didi

c++ - C++中的模板排序

转载 作者:行者123 更新时间:2023-11-30 03:10:54 25 4
gpt4 key购买 nike

大家好,我正在尝试编写一个排序函数,但在弄清楚如何初始化一个值以及如何使该函数作为通用模板工作时遇到了问题。排序方式是:

Find a pair =(ii,jj)= with a minimum value = ii+jj = such at A[ii]>A[jj] If such a pair exists, then swap A[ii] and A[jj] else break;

我写的函数如下:

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]),但在我看来,这个算法会失败。我知道这是一种奇怪的排序方式,但它是测试练习,所以感谢您的任何输入。

最佳答案

它失败的最可能原因是因为 char = 453 不产生 453 而是产生不同的数字,这取决于 char 是什么(有符号与无符号)。您的直接解决方案是使用 numerical_limits, http://www.cplusplus.com/reference/std/limits/numeric_limits/

你可能还需要考虑设计,因为char的范围很小,你很可能在添加两个char时经常溢出。

关于c++ - C++中的模板排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2785969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com