//*************************************
// 快速排序法 (划分,分治)-> (比较,交换)
// 思路: 分治思想,需要递归调用, 请查看《数据结构》 或者《计算机软件技术基础教程》或者《数据结构c语言描述》
// 调用: QuickSort(A,0,n-1);
Status QuickSort(ElemType A[], NumType low, NumType high)
{
NumType Partion(ElemType A[],NumType low, NumType high);//函数声明
NumType middle;
if(low<high) // 继续嵌套递归的条件low=high
{
middle=Partion(A,low,high);
//if(middle!=0)//这个条件真的太重要了,bug挑了一个小时才发现,处理有序序列,会middle=0,则导致middle-1溢出。
if(middle!=low) // 分组已经有序,卡到边界了。
{
QuickSort(A,low,middle-1); // 递归处理 左区间 如果middle 返回了0,则出现了比较严重的问题了。middle-1=ffffff..
}
if(middle!=high)//这个条件也很重,如果middle=high ,则函数递归进去后,遇到if(low<high) 不满足条件,执行else分支,空操作后返回。
QuickSort(A,middle+1,high);// 递归处理 右区间
}
else
{
// 递归结束,空操作。 说明一下:每次递归处理的结果都留在了数组A里面了。
}
return OK;
}