I have never done a merge sort for a 2d array so I'm struggling a bit with it. Here is my code:

Code:`/********************************************************************************`

FUNCTION NAME: mergeSort

INPUTS: roomsize (double array)

roomprofit (double array)

firstIndex (int) - first value for unsorted array index

lastIndex (int) - last value for unsorted array index

array (int) - specificies which array needs to be sorted

column (int) - specifices which column needs to be sorted

sortType (int) specifices which sort is needed

OUTPUTS: Recursive call to mergeSort allows for the array to be divided in half

with each call.

Calls mergeLtoS if items need to be sorted from greatest to smallest

Calls mergeStoL if items need to be sorted from smallest to largest

RETURN: None

PURPOSE: Breaks up an unsorted array in preperation for sorting merge

**********************************************************************************/

int mergeSort (double roomprofit[25][5], int firstIndex, int lastIndex, int sortType, int array, int column)

{

if ( firstIndex < lastIndex)

{

mergeSort (roomprofit, firstIndex, (firstIndex+lastIndex)/2, sortType, array, column);

mergeSort (roomprofit, (firstIndex+lastIndex)/2 +1, lastIndex, sortType, array, column);

switch (sortType)

{

case 1: mergeLtoS(roomprofit, firstIndex, (firstIndex+lastIndex)/2, (firstIndex+lastIndex)/2 + 1, lastIndex, array, column);

break;

case 2: mergeStoL(roomprofit, firstIndex, (firstIndex+lastIndex)/2, (firstIndex+lastIndex)/2 + 1, lastIndex, array, column);

break;

}

}

}

/********************************************************************************

FUNCTION NAME: mergeLtoS

INPUTS: roomsize (double array)

roomprofit (double array)

firstIndex1 (int)

lastIndex1 (int)

firstIndex2 (int)

lastIndex2 (int)

array (int) - specifies which array needs to be sorted

column (int) - specifices which column needs to be sorted

OUTPUTS: calls mergeMove to merge compared array sections together

RETURN: None

PURPOSE: Compares divided array sections in prep for merge to greatest to smallest

**********************************************************************************/

void mergeLtoS(double roomprofit[25][5], int firstIndex1, int lastIndex1, int firstIndex2, int lastIndex2, int array, int column)

{

double tempArray[25][5] = {{0}};

int index, index1, index2;

int num;

index = 0;

index1 = firstIndex1;

index2 = firstIndex2;

num = lastIndex1 - firstIndex1 + lastIndex2 - firstIndex2 + 2;

if (array == 3)

{

while ( (index1 <= lastIndex1) && (index2 <= lastIndex2) )

{

if (roomprofit[index1][column] > roomprofit[index2][column])

{

tempArray[index++][0] = roomprofit[index1++][0];

tempArray[index++][1] = roomprofit[index1++][1];

tempArray[index++][2] = roomprofit[index1++][2];

tempArray[index++][3] = roomprofit[index1++][3];

tempArray[index++][4] = roomprofit[index1++][4];

}

else

{

roomprofit[index1++][0] = tempArray[index++][0];

roomprofit[index1++][1] = tempArray[index++][1];

roomprofit[index1++][2] = tempArray[index++][2];

roomprofit[index1++][3] = tempArray[index++][3];

roomprofit[index1++][4] = tempArray[index++][4];

}

}

if (index1 > lastIndex1)

{

mergeMove(roomprofit, index2, lastIndex2, tempArray, index);

}

else

{

mergeMove(roomprofit, index1, lastIndex1, tempArray, index);

}

mergeMove (tempArray, 0, num-1, roomprofit, firstIndex1);

}

}

/********************************************************************************

FUNCTION NAME: mergeMove

INPUTS: arrayList1 (double array)

arrayList2 (double array)

firstIndex1 (int)

firstIndex2 (int)

lastIndex1 (int)

OUTPUTS: RETURN: None

PURPOSE: Combines sections two lists of a sorted array.

**********************************************************************************/

void mergeMove(double arrayList1[25][5], int firstIndex1, int lastIndex1, double arrayList2[25][5], int firstIndex2)

{

while (firstIndex1 <= lastIndex1)

{

arrayList2[firstIndex2++][0] = arrayList1[lastIndex1++][0];

arrayList2[firstIndex2++][1] = arrayList1[lastIndex1++][1];

arrayList2[firstIndex2++][2] = arrayList1[lastIndex1++][2];

arrayList2[firstIndex2++][3] = arrayList1[lastIndex1++][3];

arrayList2[firstIndex2++][4] = arrayList1[lastIndex1++][4];

}

}

/**** the function call and assignments for the merge sort from main ****/

sortType = 1;

array = 3;

column = GROSS;

roomprofitPrint(roomprofit, salesroom, roomname);

mergeSort (roomprofit, 0, 25, sortType, array, column);

roomprofitPrint(roomprofit, salesroom, roomname);

This is my output when I run this portion of the program:

-----------------------------------------------------------------

Room Profit Information

-----------------------------------------------------------------

| Type | Gross Income | Net Profit |

-----------------------------------------------------------------

Sales 1 51187.50 21937.50

Sales 2 25923.25 12230.75

Hangup

I am pretty sure the problem is the merge call instead of the prints. I have tested the roomprofitPrint function separately and it works every time its used unless the merge functions are called first. I'm just not sure where the error is, but I know I was guessing my way through how a 2D array would apply to the merge sort algorithm. Some advice on where my thinking is wrong would be greatly appreciated.

Thanks