I took the merge sort, I need to calculate the complexity of the number of iterations, but for some reason I do not match. For example, for an array of length 16, the number of iterations should be 64. Tell me what and where is the error?
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class M { private static int[] aux;//Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ ΡΠ»ΠΈΡΠ½ΠΈΠΉ public static long kol = 0; public static void sort(int [] a) { aux = new int [a.length]; sort(a, 0, a.length - 1); } private static void sort(int [] a, int lo, int hi) { kol++; if (hi <= lo) { return; } int mid = lo + (hi - lo) / 2; sort(a, lo, mid);//ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π»Π΅Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ sort(a, mid + 1, hi);//ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΠ°Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ merge(a, lo, mid, hi);//ΡΠ»ΠΈΡΠ½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² } public static void merge(int[] a, int lo, int mid, int hi) { int i = lo, j = mid + 1; for (int k = 0; k <= hi; k++) {//ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ a[lo..hi] Π² aux[lo..hi] aux[k] = a[k]; kol++; } for (int k = lo; k <= hi; k++) {//ΡΠ»ΠΈΡΠ½ΠΈΠ΅ Π½Π°Π·Π°Π΄ Π² a[lo.. hi] kol++; if (i > mid) { a[k] = aux[j++]; } else if (j > hi) { a[k] = aux[i++]; } else if (aux[j]<(aux[i]) ) { a[k] = aux[j++]; } else { a[k] = aux[i++]; } } } public static void main(String... args) throws FileNotFoundException { int[] p = new int [16]; for (int i = 0; i < 16; i++) { p[i] = 10 - i; } sort(p); System.out.println(kol); for (int i = 0; i < 16; i++) { System.out.println(p[i]); } } }