Sorting 选择排序-最小值/最大值的索引
我正在查看上的选择排序算法 我想我在实现中发现了一个错误 如果你使用这个算法,有一个变量叫做“index_of_min”,我相信它应该是“index_of_max”(因为当我测试它时,它是从大到小排序的) 认为这是一个打字错误或一个小错误,我查看了一些其他网站,如和一些不太知名的网站,如。看起来他们把它叫做最小指数 当我通过调试器运行它时,我真的觉得它是最大值的索引。我在什么地方出错了吗Sorting 选择排序-最小值/最大值的索引,sorting,Sorting,我正在查看上的选择排序算法 我想我在实现中发现了一个错误 如果你使用这个算法,有一个变量叫做“index_of_min”,我相信它应该是“index_of_max”(因为当我测试它时,它是从大到小排序的) 认为这是一个打字错误或一个小错误,我查看了一些其他网站,如和一些不太知名的网站,如。看起来他们把它叫做最小指数 当我通过调试器运行它时,我真的觉得它是最大值的索引。我在什么地方出错了吗 编辑:正如斯万特指出的,只有cprogramming的实现是错误的。Wikipedia和Geekpidia很
编辑:正如斯万特指出的,只有cprogramming的实现是错误的。Wikipedia和Geekpidia很好。Wikipedia和geekpedia网站似乎是正确的,cprogramming.com的实现实际上有一个bug;这:
if (array[index_of_min] < array[y])
{ index_of_min = y; }
if(数组[index\u of_min]
如果顺序颠倒,则应为:
if (array[y] < array[index_of_min])
{ index_of_min = y; }
if(数组[y]
另一个修复方法是调用变量
index\u of_max
,但我希望排序算法能够从最小到最大排序,如果大多数程序员都有这种期望(我认为),那么最小惊讶原则就需要上述修复。维基百科和GeekMedia网站似乎是正确的,cprogramming.com实现实际上有一个bug;这:
if (array[index_of_min] < array[y])
{ index_of_min = y; }
if(数组[index\u of_min]
如果顺序颠倒,则应为:
if (array[y] < array[index_of_min])
{ index_of_min = y; }
if(数组[y]
另一个修复方法是调用变量
index\u of_max
,但我希望排序算法能够从最小到最大排序,如果大多数程序员都有这种期望(我认为),那么最小惊讶原则需要上述修复。你是对的。该网站的代码(如下所示)不正确
for(int x = 0; x < n; x++)
{
int index_of_min = x;
for(int y = x; y < n; y++)
{
if(array[index_of_min] < array[y]) /* Here's the problem */
{
index_of_min = y;
}
}
int temp = array[x];
array[x] = array[index_of_min];
array[index_of_min] = temp;
}
你说得对。该网站的代码(如下所示)不正确
for(int x = 0; x < n; x++)
{
int index_of_min = x;
for(int y = x; y < n; y++)
{
if(array[index_of_min] < array[y]) /* Here's the problem */
{
index_of_min = y;
}
}
int temp = array[x];
array[x] = array[index_of_min];
array[index_of_min] = temp;
}
我刚刚读了代码,但看起来你是对的:要么是
index\u of_min
命名错误,要么是比较反向
这并不像在几个地方看到这个错误那样奇怪。很可能每个都是从一个公共源复制的。我刚刚读了代码,但看起来你是对的:要么是
index\u of_min
命名错误,要么是比较反向
这并不像在几个地方看到这个错误那样奇怪。很可能每个元素都是从一个公共源复制的。来自Cprogramming.com“它的工作原理是选择数组中最小的(或最大的,如果你想从大到小排序)元素,并将其放在数组的开头”,这样他们就可以将其从大到小排序,代码没有错误,变量命名也没有错误,_min的索引_跟踪数组(0)的起点,然后在该数组中向前移动。ie index_of_min保持最小的索引值。不要将其与该索引处的值混淆。来自Cprogramming.com“它的工作原理是选择数组中最小的(或最大的,如果您想从大到小排序)元素,并将其放置在数组的开头”,这样他们就可以将其从大到小排序,代码没有错误,变量命名也没有错误,_min的索引_跟踪数组(0)的起点,然后在该数组中向前移动。ie index_of_min保持最小的索引值。不要将其与该索引的值混淆。以及故事的寓意(再次!)。在发布代码之前测试它!故事的寓意(再一次!)。在发布代码之前测试它!^^这适用于迭代的前半部分,一旦在嵌套循环中,它将采用最大的索引。但是,一旦新的迭代开始,索引_of_min将被视为数组中的下一个最小索引。^^这适用于迭代的前半部分,一旦在嵌套循环中,它将采用最大的索引。但是,一旦新的索引开始,索引_of_min将被视为数组中的下一个最小索引。