我在追蹤合併排序的過程中有點困難...... 從概念上講,我明白一個未排序的數組將被分割,直到它的子數組的子數組變成1的長度,其中它變成一個數組,每個數組包含1個元素,據說這是排序的。 發言權的一個未排序的陣列上使用合併排序跟蹤澄清
mergeSort(A,p,r) //where p = lowest index, r = highest
if (p < r) {
q = (p+r)/2
mergeSort(A,p,q)
mergeSort(A,q+1,r)
merge(A,p,q,r)
}
[3,5,2,1,6,4]其中,p是在元件3的索引,q是元件2的索引,並且r是在索引元素4.根據我的理解, 由於調用mergeSort(A,p,q),它將首先被分成[3,5,2];現在新的索引將在元素3處爲p,元素5處爲q,元素2處爲r;所以[3,5,2]將被劃分爲[3,5],其中p和q是元素3的索引,r是元素5的索引;這將分爲[3]。我的問題是,[2](來自[3,5,2]除法後)被索引爲p或q + 1?因爲[3,5,2,1,6,4]將被分成[3, 5,2]和[1,6,4];將分爲[3,5]和[2]; [1,6]和[4];這也將分爲[3] [5]和[1] [6];哪個部分調用mergeSort(A,p,q),哪個部分調用mergeSort(A,q + 1,r)? [1,6,4]也被索引爲元素1處的p,元素4處的r?