using System;
using System.Threading;
publicclassThreadExample
{
publicvoid sortArray()
{
q_sort( 0, x-1 );
}
}
publicstaticvoid q_sort( int left, int right )
{
int pivot, l_hold, r_hold;
l_hold = left;
r_hold = right;
pivot = a[left];
while( left < right )
{
while( (a[right] >= pivot) && (left < right) )
{
right--;
}
if( left != right )
{
a[left] = a[right];
left++;
}
while( (a[left] <= pivot) && (left < right) )
{
left++;
}
if( left != right )
{
a[right] = a[left];
right--;
}
}
a[left] = pivot;
pivot = left;
left = l_hold;
right = r_hold;
if( left < pivot )
{
q_sort( left, pivot-1 );
}
if( right > pivot )
{
q_sort( pivot+1, right );
}
}
////
privatevoid MergeSort(string[] a)
{
string[] a1 = SubArray(a, 0, a.Length / 2 - 1);
string[] a2 = SubArray(a, a.Length / 2, a.Length - 1);
if (a1.Length > 1) MergeSort(a1);
if (a2.Length > 1) MergeSort(a2);
Merge(a1, a2, a);
}
privatevoid Merge(string[] a1, string[] a2, string[] a)
{
int i = 0, j = 0, h = 0;
while (i < a1.Length || j < a2.Length)
{
if (i == a1.Length) a[h++] = a2[j++];
elseif (j == a2.Length) a[h++] = a1[i++];
else
if (a1[i].CompareTo(a2[j]) < 0)
{
a[h++] = a1[i++];
}
elseif (a1[i].CompareTo(a2[j]) > 0)
{
a[h++] = a2[j++];
}
else
{
a[h++] = a1[i++];
a[h++] = a2[j++];
}
}
}
privatestring[] SubArray(string[] array, int start, int end)
{
string[] sub = newstring[end - start + 1];
for (int i = start; i <= end && i < array.Length; i++)
{
sub[i - start] = array[i];
}
return sub;
}
//end merge sort
publicstaticvoid Main()
{
Random r = new Random();
Thread t1 = new Thread(new ThreadStart(qsort));
t1.Start();
Thread t2 = new Thread(new ThreadStart(mergesort));
t2.Start();
}
}