选择排序 - 最小/最大索引

时间:2009-06-17 19:08:11

标签: sorting

我正在查看cprogramming.com上的选择排序算法 我认为我在实施中发现了一个错误。

如果您使用该算法,则会有一个名为“index_of_min”的变量,我认为该变量应该是“index_of_max”(因为当我测试它时,它是从最大到最小的排序)。

认为这是一个错字或一个小错误,我检查了一些其他网站,如wikipedia和一些鲜为人知的网站,如geekpedia。看起来他们称之为最低指数。

当我通过调试器运行它时,在我看来它确实是最大值的索引。我在某个地方犯了错误吗?

编辑:正如Svante所指出的那样,只有cprogramming的实现是错误的。维基百科和Geekpidia都很好。

4 个答案:

答案 0 :(得分:3)

维基百科和geekpedia网站似乎是正确的,cprogramming.com实现实际上有一个错误;这样:

if (array[index_of_min] < array[y])
  { index_of_min = y; }

顺序颠倒了,应该是:

if (array[y] < array[index_of_min])
  { index_of_min = y; }

另一种解决方法是调用变量index_of_max,但我希望排序算法能够从最小到最大排序,如果这个期望被大多数程序员共享(正如我所假设的那样),那么原理就是最不惊讶的是要求上述修复。

答案 1 :(得分:0)

你是对的。该网站的代码(如下所示)不正确。

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 y=x; y<n; y++) ,变量 index_of_min 保存最大值的索引< / em>价值。假设设计将数组从最大到最小排序,这是命名不佳的变量

如果您希望数组排序最小到最大(正如人们所期望的那样),您需要反转if语句

if (array[y] < array[index_of_min])
{
    index_of_min = y;
}

享受,

Robert C. Cartaino

答案 2 :(得分:0)

我只是阅读了代码,但看起来你是对的:要么index_of_min被错误命名,要么比较落后。

在几个地方看到这个错误并不像看起来那么奇怪。很可能每个都是从一个共同的来源复制的。

答案 3 :(得分:0)

来自Cprogramming.com“它的工作原理是选择数组中最小的(或最大的,如果你想从大到小排序)元素并将它放在数组的头部”所以他们让它从大到大排序很小,代码是错误的,变量命名也不是,index_of_min跟踪数组中的起始点(0)然后在该数组中向前移动。即index_of_min保持最小的索引值。不要把它与该指数的价值混淆。