I am currently triyng to sort some intergers with Merge Sort, but something is wrong with my algoritm. I have a larger file with integers Im supposed to sort, but I use a smaller, given array to check if its working before sorting the larger file.
My Output from THIS algoritm is: 1 2 2 2 4 5 6, but it's supposed to be: 1 2 4 5 6 9 10 ??
Here's what I've got:
private static int[] data = new int[] { 1, 9, 10, 2, 4, 5, 6 };
static void Main(string[] args)
{
int N = data.Length;
Sort(data, 0, N - 1);
for (int i = 0; i < N; i++)
Console.WriteLine(data[i]);
}
private static void Merge(int[] intArray, int lo, int mid, int hi)
{
int i = lo;
int j = mid + 1;
if (intArray.Length != 0)
for (int k = lo; k <= hi; k++)
data[k] = intArray[k];
for (int k = lo; k <= hi; k++)
{
if (i > mid)
intArray[k] = data[j++];
else if (j > hi)
intArray[k] = data[i++];
else if (data[j] < data[i])
intArray[k] = data[j++];
else if (data[i] < data[j])
intArray[k] = data[i++];
}
}
private static void Sort(int[] intArray, int lo, int hi)
{
if (hi <= lo)
return;
int mid = lo + (hi - lo) / 2;
Sort(intArray, lo, mid);
Sort(intArray, mid + 1, hi);
Merge(intArray, lo, mid, hi);
}
data[k] = intArray[k];--dataandintArrayare the same array, so this line does nothing (it's exactly the same asdata[k] = data[k], becauseintArraypoints to the same array asdata. I suspect your problems come from this misunderstanding of how C# reference types work.