2009-06-17 87 views
0

我正在通过选择排序算法0​​ 寻找,我想我在实现中发现一个错误。选择排序 - 最小/最大索引

如果你通过算法工作,有一个名为“index_of_min”的变量,我认为它应该是“index_of_max”(因为当我测试它时,它从最大到最小排序)。

认为这是一个错字或一个小错误,我检查了一些其他网站,如wikipedia和一些鲜为人知的网站,如geekpedia。看起来他们叫它min的索引。

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

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

回答

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,但我希望排序算法进行排序最小到最大,如果这个期望被大多数程序员分享(正如我所设想的那样),最不惊讶的原则更需要上述修正。

+0

和故事的寓意(再次!)。在发布之前测试你的代码! – UncleO 2009-06-17 19:38:00

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,保持最大值的索引。假设它是设计的来排序从最大到最小阵列,这是一个命名不佳

如果你想在数组排序最小到最大(如人们所期望的),你需要扭转if语句

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

享受,

罗伯特C. Cartaino

0

我只是刚刚阅读了代码,但它看起来像是对的:index_of_min是错误的或者比较是反向的。

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

0

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

+0

^^这适用于迭代的前半部分,一旦在嵌套循环中它确实取最大的索引。然而,Index_of_min只要一个新的启动开始就被分配到数组中下一个最小的索引。 – Trowalts 2009-06-17 19:48:40