Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 选择排序-最小值/最大值的索引_Sorting - Fatal编程技术网

Sorting 选择排序-最小值/最大值的索引

Sorting 选择排序-最小值/最大值的索引,sorting,Sorting,我正在查看上的选择排序算法 我想我在实现中发现了一个错误 如果你使用这个算法,有一个变量叫做“index_of_min”,我相信它应该是“index_of_max”(因为当我测试它时,它是从大到小排序的) 认为这是一个打字错误或一个小错误,我查看了一些其他网站,如和一些不太知名的网站,如。看起来他们把它叫做最小指数 当我通过调试器运行它时,我真的觉得它是最大值的索引。我在什么地方出错了吗 编辑:正如斯万特指出的,只有cprogramming的实现是错误的。Wikipedia和Geekpidia很

我正在查看上的选择排序算法 我想我在实现中发现了一个错误

如果你使用这个算法,有一个变量叫做“index_of_min”,我相信它应该是“index_of_max”(因为当我测试它时,它是从大到小排序的)

认为这是一个打字错误或一个小错误,我查看了一些其他网站,如和一些不太知名的网站,如。看起来他们把它叫做最小指数

当我通过调试器运行它时,我真的觉得它是最大值的索引。我在什么地方出错了吗


编辑:正如斯万特指出的,只有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将被视为数组中的下一个最小索引。