マージソートのプロセスをトレースするのが少し難しいです... 概念的には、ソートされていない配列は、サブ配列のサブ配列が長さ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でインデックスされています私の理解から、 は、mergeSort(A、p、q)を呼び出すために、最初に[3,5,2]に分割されます。新しいインデックスは要素3でq、要素5でq、要素2でrになります。したがって、[3,5,2]は、pを用いて[3,5]に分割され、qは要素3のインデックスであり、rは要素5のインデックスである。これは[3]に分割される。私の質問は、[2](除算後の[3,5,2]から)はpまたはq + 1として索引付けされていますか?
....実際には、[3,5,2,1,6,4]が[3、5、2、1、6、4]に分割されるので、別の方法で質問すると、 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、