2016-12-04 44 views
1

合併排序算法的一部分看起來像這樣的,當它合併兩個數組:歸併排序其餘複製上半年

while (fromValue <= mid && middleValue <= to) { 
    if (comp.compare(a[fromValue], a[middleValue]) < 0) { 
    values[index] = a[fromValue]; 
    fromValue++; 
    } else { 
    values[index] = a[middleValue]; 
    middleValue++; 
    } 
    index++; 
} 

while (fromValue <= mid) { 
    values[index] = a[fromValue]; 
    fromValue++; 
    index++; 
} 
while (middleValue <= to) { 
    values[index] = a[middleValue]; 
    middleValue++; 
    index++; 
} 

我知道,第一while語句。但第二次和第三次聲明的意義何在?因爲第一次停止時,「從價值中等」和「中等價值」到「已經。那麼這兩個其他的陳述將被跳過?

回答

1

讓我們的案例數組:{2, 4, 7, 9, 1, 3, 5, 6}

第一while循環副本此時middlevalue已經達到to序列1, 2, 3, 4, 5, 6。所以,循環結束。

該程序然後移動到其餘while循環的第一個,其中複製7, 9的值。

案例例2中,採取數組:{4, 7, 8, 10, 5, 6, 12, 14} 這裏主要而在4, 5, 6, 7, 8, 10循環拷貝在該點fromValue已達mid。所以,循環結束。

該程序然後移動到剩餘的while循環的第二個,其中複製的值爲12, 14

因此,跳過兩個較小的while循環中只有一個(哪一個取決於初始數組)。