Hey folks!
I'm trying to count inversions in a list using MergeSort. I've got MergeSort functioning properly, but can't figure out how and when to update the Inversion count in Merge. Here's my code:
I know that Inversions must be incremented by the amount of items remaining in the first list, when the number in the second list is smaller then the second list, but I cannot get out the correct answer.Code:int SortAndCount(int arr_list[], int leftSize, int rightSize) { int invLeft=0, invRight=0, invBoth=0; if(leftSize < rightSize) { int middleValue = (leftSize+rightSize) / 2; invLeft = SortAndCount(arr_list, leftSize, middleValue); invRight = SortAndCount(arr_list, middleValue+1, rightSize); invBoth = MergeAndCount(arr_list, leftSize, rightSize); } return invLeft + invRight + invBoth; } int MergeAndCount(int arr_List[], int leftSize, int rightSize) { int newSize = rightSize - leftSize + 1; int middleValue = (rightSize + leftSize) /2; int Inversions=0, totalInv=0; int *tempArray = new int[newSize]; int posistion=0; int i, j, placement=0; for(i=leftSize; i<=middleValue; i++, posistion++) { tempArray[posistion]=arr_List[i]; } for(i=rightSize; i >= middleValue+1; i--, posistion++) { tempArray[posistion]=arr_List[i]; } for(i=0,j=newSize-1, placement=leftSize; i<=j; placement++) { if(tempArray[i]<=tempArray[j]) { arr_List[placement]=tempArray[i]; i++; } else { Inversions = Inversions + ( i - j); arr_List[placement] = tempArray[j]; j--; } } delete[] tempArray; return Inversions; }
Any help is appreicated! Thanks![]()


LinkBack URL
About LinkBacks