目 标 用C#实现快速排序
思 想 此排序为不稳定排序法
在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos- 1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字 pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。
实现
{
int low = 0;
int high = intArray.Length - 1;
Sort(intArray, low, high);
}
private void Sort(int[] intArray, int low, int high)
{
int intPivot;
if (low < high)
{
intPivot = SortOnce(intArray, low, high);
Sort(intArray, low, intPivot - 1);
Sort(intArray, intPivot + 1, high);
}
}
private int SortOnce(int[] intArray, int low, int high)
{
int intPivot = intArray[low];
while (low < high)
{
while (high > low && intArray[high] >= intPivot)
{
--high;
}
//比中心轴记录小的移到左边
swap(ref intArray, low, high);
while (high > low && intArray[low] <= intPivot)
{
++low;
}
//比中心轴记录小的移到右边
swap(ref intArray, low, high);
}
intArray[low] = intPivot;
return low;//返回中心轴记录位置
}
private void swap(ref int[] intArray, int low, int high)
{
int intTemp = intArray[low];
intArray[low] = intArray[high];
intArray[high] = intArray[low];
}
代码下载 快速排序代码