通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
public static int sortUnit(int[] Array, int low, int high)
{
int key = Array[low];
while (low < high)
{
//从后往前找比key小的值 因为这里是while循环去判断 因此不能像下面这样写 不然low一直是不变的
//while(Array[high] < key && low < high)
//{
//--high;
//}
//从后往前找比key小的值
//比key大的就让high--
while (Array[high] >= key && low < high)
{
//--high;
Console.WriteLine(high+"开始high");
high--;
Console.WriteLine(high + "结束high");
}
//比key小的就赋值
Array[low] = Array[high];
Console.WriteLine(low+"low是几");
//从前往后找比key大的值
//比key小的就++low
while (Array[low] <= key && low < high)
{
//++low;
Console.WriteLine(low+"开始low");
low++;
Console.WriteLine(low + "结束low");
}
//比key大的就赋值
Array[high] = Array[low];
Console.WriteLine(high+"High是几");
}
//此时low = high 左边都比key小 右边都比key大
//将关键key放到游标当前位置
Array[low] = key;
//返回key的索引
return high;
}
public static void Sort(int[] Array, int low, int high)
{
if (low >= high)
{
return;
}
int index = sortUnit(Array, low, high);
Sort(Array, low, index - 1);
Sort(Array, index + 1, high);
}
static void Main(string[] args)
{
int[] demo = new int[] { 0, 5, 3, 1, 2 };
//6 2 5 3 1
Sort(demo, 0, demo.Length - 1);
foreach (var item in demo)
{
Console.WriteLine(item);
}
Console.ReadKey();
}