博客中代码都经过运行并且没有bug
//待排序的数组
static int[] sortArray = { -1,8, 12, 20, 19, 33, 1, 7, 6 };//sortArray[0]上的数不参与排序,仅在排序过程中用来存储临时变量
/// <summary>
/// 每次划分后的具体排序过程
/// </summary>
/// <param name="R">待排序的数组</param>
/// <param name="low">下界指针,指示数组比较的范围的下界</param>
/// <param name="high">上界指针,指示数组标胶的范围的上界</param>
/// <returns></returns>
private static int Partition(int[] R, int low, int high)
{
R[0] = R[low];
int pivotkey = R[low];//枢轴记录关键字
while (low < high)
{
while (low < high && R[high] >= pivotkey)
{
--high;
}
R[low] = R[high];
while (low < high && R[low] <= pivotkey)
{
++low;
}
R[high] = R[low];
}
R[low] = R[0];//枢轴记录到位
return low;
}
/// <summary>
/// 快速排序
/// </summary>
/// <param name="R">待排序的数组</param>
/// <param name="low">下界指针,指示数组比较的范围的下界</param>
/// <param name="high">上界指针,指示数组标胶的范围的上界</param>
private static void QSort(int[] R, int low, int high)
{//对记录序列R[low...high]进行快速排序
if (low < high - 1)//长度大于1
{
int pivotloc = Partition(R,low,high);
QSort(R,low,pivotloc-1);//对低子表递归排序,pivotloc是枢纽位置
QSort(R,pivotloc+1,high);//对高子递归列表排序,ptvotloc是枢纽位置
}
}
private static void ShowSortArray()
{
for (int i = 1; i <= sortArray.Length - 1; i++)
{
Console.Write(sortArray[i] + " ");
}
Console.WriteLine();
}
static void Main(string[] args)
{
QSort(sortArray,1, sortArray.Length-1);
ShowSortArray();
Console.ReadKey();
}
平均时间复杂度T(n)=O(n*lnn)
最差时间复杂度T(n)=O(n^2)