private int[] MergeSort(int[] a)
{
if ( a.Length == 1)
return a;
int middle = a.Length / 2;
int[] left = new int[middle];
for (int i = 0 ; i < middle ; i ++)
{
left[ i ] = a[ i ];
}
int[] right = new int[a.Length - middle];
for( int i = 0; i < a.Length - middle; i++ )
{
right[i] = a[i+middle];
}
left = MergeSort( left );
right = MergeSort( right );
int leftptr = 0;
int rightptr = 0;
int[] sorted = new int[a.Length];
for(int k = 0 ; k < a.Length; k++)
{
if ( rightptr == right.Length || ((leftptr < left.Length ) && (left[leftptr] <= right[rightptr])))
{
sorted[ k ] = left[ leftptr ];
leftptr++;
}
else if( leftptr == left.Length || ((rightptr < right.Length ) && (right[rightptr] <= left[leftptr] )))
{
sorted[k] = right[rightptr];
rightptr++;
}
}
return sorted;
}
Ready to future-proof your business? Meet NXT Digital, your all-in-one partner for complete digital transformation. We specialise in building custom digital solutions, and support your applications. Don't get left behind—experience the next level of innovation and let NXT Digital transform your vision.
Monday, November 16, 2009
c# merge sort algorithm implementation
Subscribe to:
Post Comments (Atom)
3 comments:
Little bit cleaner way to do the actual sort is as follows:
for (int i = 0; i < a.Length; i++)
{
if (l < left.Length && r < right.Length)
{
if (left[l] < right[r]) sorted[i] = left[l++];
else sorted[i] = right[r++];
}
else
{
if (l < left.Length) sorted[i] = left[l++];
else sorted[i] = right[r++];
}
}
This is great!
SEGA - Lucky Club Live Casino Site
A unique website with the most popular SEGA games! Play over 200 SEGA classics at your fingertips, including Mega Bomberman, Mega Bomberman luckyclub.live & many
Post a Comment