0

我的算法不起作用,我是所有算法和 javascript 的新手,我似乎无法弄清楚为什么它不起作用。

这是数组 (23, 19, 35, 12, 30)

最大值 = 0

这就是我所拥有的...

For K= 0 to n – 2 

  MAX = 0

      For j = 0 to n – k - 2

                         If item[j] > item[MAX]
                         MAX = item[j] 

                  end if
          end for 
      swap n - k - 2 with item[MAX] 
   end for
end SelectionSort

我哪里出错了?谢谢!!!!

另外,如果有人能告诉我如何在跟踪表中使用它,我会很高兴的!

亲切的问候克雷格

4

2 回答 2

1

在这个表达式中使用 max 会导致问题 item[MAX],它将是 j。请考虑一下,然后像这样重试,选择排序演示

     var arr = new Array (23, 19, 35, 12, 30);         
     temp = 0;

     for( k = 0; k < arr.length-1; k++)
     {

        for( j = k+1;  j < arr.length; j++)
        {

            if (arr [k] > arr [j])
            {

                 temp = arr[k];
                 arr[k] = arr[j];
                 arr[j] = temp;
            }
         }
     }

for(k = 0; k < arr.length; k++)
    alert(arr[k]);​
于 2012-04-26T04:23:26.887 回答
0

我相信您的代码中有一些错误。首先,这两个地方的上限应该是 n - k -1 而不是 n -k-2(如果索引 nk-1 已经是最大值,则不要移动索引元素)。此外,您应该将 item[nk-1] 与 item[MAX] 交换(而不是您编写的索引)。我相信这样的事情应该有效:

 For K= 0 to n – 1 
   MAX = 0
   For j = 0 to n – k - 1
      If item[j] > item[MAX]
        MAX = item[j] 
      end if
   end for 
   swap item[n - k - 1] with item[MAX] 
  end for
end SelectionSort
于 2012-04-26T06:56:57.493 回答