具体理论参考其他文章,我这里推荐【数据结构与算法-c语言描述版】这本书,在书的177-183页,描述了相关的原理,思路非常清晰
这里给出c#实现的代码:
static void Sort(ref int[] a,int left,int right)
{
Console.WriteLine(a.Length);
if(left<right)
{
int priot = a[right]; //最右边选择为枢纽元
int leftIndex = left;
int rightIndex = right;
while(leftIndex<rightIndex)
{
rightIndex--;
while (leftIndex < rightIndex && a[rightIndex] > priot)
rightIndex--;
while (leftIndex < right && a[leftIndex] < priot)
leftIndex++;
//交换两个数
if (leftIndex < rightIndex)
{
int temp = a[rightIndex];
a[rightIndex] = a[leftIndex];
a[leftIndex] = temp;
}
}
// a[leftIndex] = priot; //将该数与枢纽元交换
a[right] = a[leftIndex];
a[leftIndex] = priot;
Sort(ref a, left, leftIndex - 1);
Sort(ref a, leftIndex + 1, right);
}
}