2015-04-18 15 views
-1

看下面的代碼,第一次迭代是不是意味着i = 0和j = 0 - 1?爲什麼沒有錯誤?我認爲插入排序是假設從數組/右側開始。這段代碼是如何完成的?關於訂單的插入排序代碼困惑

class stevee { 
public static void main(String[] args) { 
    int A[] = {2,1,9,8,12}; 
    new stevee().sort(A); 
    System.out.println(Arrays.toString(A)); 
} 
public void sort(int[] data) { 
    for (int i=0; i<data.length; i++) { //access each element one by one 
     int current = data[i];   // 
     int j = i-1; 
     while (j >= 0 && data[j] > current) { 
      data[j+1] = data[j]; 
      j--; 
     } 
     data[j+1] = current; 
    } 
} 
} 
+1

在&&運算符的情況下) –

回答

0

插入排序,從在大多數例子中結束工作。但爲什麼它不能從另一端工作呢? '正確'和'左'只是幫助條款。插入排序通常用你手中的一套牌來解釋。從哪個方面開始放置它們有什麼關係?

而且沒有錯誤原因while也作爲if,j < 0→條件不符合→阻止不執行。在條件爲&&的情況下,兩個表達式必須不一致,否則執行第二個評估的意義不大,因爲java使用延遲評估,所以如果第一部分爲假,其餘部分未被檢查(第二部分爲false),則沒有意義執行第二個

-1

有對這種情況下的條件:while (j >= 0