java插入排序兼編碼注意

weixin_34041003發表於2013-05-03

這個過程,也是一個自我提高的過程。

我開始自已寫,while(in > 0 && a[in - 1] >= temp )這裡總有問題。

後來仔細想想,也是,如果IN>0放在後面,那麼&&之後可能會邏輯短路。且IN-1先執行,再判斷IN,就會出現陣列下標IN-1等於-1越界的情況。所以,IN>0必放前面。

第二,將&&更換成&行不行?也不行。因為&不會邏輯短路,就算IN>0不成立,它一樣會執行IN-1的陣列下標判斷,一定會出錯。

真的是一步一小心呀。在規則內,可以橫行,但稍稍越出規則一步,都是不允許的。

  public void insertionSort()
      {
          int out;
          int in;
          for(out = 1; out < nElems; out++){
              long temp = a[out];
              in = out;
              System.out.print(a[in] + " \tbefor sort :\t"+ in);
             while(in > 0 && a[in - 1] >= temp )
             {
                 a[in] = a[in -1];
                 in--;
             }
             System.out.println("\t---after sort : \t" + in);
             a[in] = temp;
            }
      }


為了仔細看到對IN位置的查詢,我加了兩個輸出,更能理解程式碼的執行邏輯過程。

相關文章