2015-04-18 2 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

, потому что java использует ленивую оценку, так что если первая часть ложна, остальные не проверены (В случае оператора &&) –

ответ

0

Вносимые сортировать работает с конца в большинстве примеров. Но почему он не мог работать с другой стороны? «Правый» и «Левый» - это только помощь. Сортировка вставки часто объясняется набором карт в руке. Имеет ли значение, с какой стороны вы их ставите?

И нет причины ошибки while работает также как if, j < 0 -> состояние не выполнено -> блок не выполнен. В то время как у вас есть &&, так что оба выражения должны быть истинными, если вначале нет, нет смысла выполнять оценку второго

-1

Там есть условие для этого случая: while (j >= 0

Смежные вопросы