class QuickSort
{
private void Swap(ref int i, ref int j)
{
int t;
t = i;
i = j;
j = t;
}
public void Sort(int[] list, int low, int high)
{
if (high <= low)
{//only one element i array list
//so it do not need sort
return;
}
else if (high == low + 1)
{
if (list[low] > list[high])
{
Swap(ref list[low], ref list[high]);
return;
}
}
myQuickSort(list, low, high);
}
private void myQuickSort(int[] list, int low, int high)
{
if (low < high)
{
int pivot = Partition(list, low, high);
myQuickSort(list, low, pivot - 1);
myQuickSort(list, pivot + 1, high);
}
}
private int Partition(int[] list, int low, int high)
{
int pivot;
pivot = list[low];
while (low < high)
{
while(low <high&&list[high]>=pivot)
{
high--;
}
if(low!=high)
{
Swap(ref list[low], ref list[high]);
low++;
}
while(low<high&&list[low]<=pivot)
{
low++;
}
if(low!=high)
{
Swap(ref list[low], ref list[high]);
high--;
}
}
return low;
}
}
class Program
{
static void Main(string[] args)
{
QuickSort quick = new QuickSort();
int[] arr = new int[] {4,5,1,9,6,3,2,8,7 };
quick.Sort(arr, 0, 8);
foreach (int a in arr)
{
Console.WriteLine(a);
}
Console.ReadLine();
}
}