【问题标题】:Why InsertionSort doesn't run? [closed]为什么 InsertionSort 不运行? [关闭]
【发布时间】:2018-10-03 14:22:29
【问题描述】:

这是 InsertionSort 的代码,但为什么它不运行?也就是说,它不会按升序对数字进行排序。

class A {
    public static void main(String[] args) {        
    int [] n = {3,2,1};

    for (int j = 2; j < n.length; j++) {        
        int key = n[j];
        int i = j - 1;  

        while (i > 0 && n[i] > key) {           
            n[i + 1] = n[i];
            i = i-1;            
        }   

        n[i + 1] = key;     
    }   

    for(int k: n)
        System.out.print(k);        
    }   
}

【问题讨论】:

  • 是时候使用调试器了。
  • 算法书上的插入排序是伪代码,调试器跟它有什么关系?
  • 调试器与它有关。当我们试图帮助找出代码中的问题时,您认为我们会怎么做?盯着它,希望我们有一个尤里卡时刻?运行我们脑海中的代码?我们都只是用水做饭。我们将您的代码粘贴到我们最喜欢的 IDE 中,并使用调试器运行它以查看发生了什么。你也可以这样做。我强烈建议您了解如何(以及何时)使用调试器。

标签: java algorithm optimization


【解决方案1】:

您为算法考虑的索引是基于 1 的。它需要从零开始(数组就是这样)。

在你的 for 循环中从 j =1 开始

for (int j = 1; j < n.length; j++)

在你的while循环中检查while(i&gt;=0 &amp;&amp; n[i])&gt;key)

【讨论】:

    【解决方案2】:

    你应该在1开始你的for循环:

    for (int j = 1; j < n.length; j++) {
    

    你的while循环应该是&gt;= 0:

    while (i >= 0 && n[i] > key) {
    

    给出:

    123

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多