java - Complexity of merge -
what complexity of variant version of merge ? Ο(n) or o(nlogn) ?
suppose complexity of function:
elements.indexofrightmostsmallestelement(array, i, mid - 1);
is o(logn).
private static long merge(list<integer> array, int[] res, int start, int mid, int end) { int = start; // index of left subarray int j = mid; // index of right subarray int k = start; //index of mid long inversions = 0; (int r = start; r <= end; r++) { // copy smallest values either left or right side // temporary array res if ((j>end) || (i < mid && array.get(i) <= array.get(j))) { res[r] = array.get(i); i++; } else { if (i < mid) { /* @ step in merge(), if a[i] greater a[j], there (mid – i) inversions. because left , right subarrays sorted, remaining elements in left-subarray (a[i+1], a[i+2] … a[mid]) greater a[j] */ if (array.get(i) - array.get(j) > 1) { inversions += 3 * (mid - i); } else { int s; //we search position of rightmost element increased 1 (o(logn)) s = elements.indexofrightmostsmallestelement(array, i, mid - 1); inversions += 2 * (s - + 1); // elements position position s have same value , increased 1 of [j] inversions += 3 * (mid - (s + 1)); // elements position s+1 position mid difference greater 1 because subarray sorted } } res[r] = array.get(j); j++; } } }
Comments
Post a Comment