c# 实现快速排序算法
/// <summary>
/// 快速排序
/// </summary>
public class QuickSort
{
/// <summary>
/// 快速排序入口
/// </summary>
/// <param name="array">待排序的数据数组</param>
public static void quick_sort(int[] array)
{
if (null == array || 0 == array.Count())
return; //判断数据的合法性
Console.WriteLine("原始数据为");
foreach (int i in array)
{
Console.Write(i + " ");
}
Console.WriteLine(" ");
_quick_sort(array, 0, array.Count() - 1);
Console.WriteLine("排序后的数据为");
foreach (int i in array)
{
Console.Write(i + " ");
}
}
/// <summary>
/// 快速排序核心算法
/// </summary>
/// <param name="array">待排序的数据数组</param>
/// <param name="low">待排序的数据数组起始位置</param>
/// <param name="high">待排序的数据数组结束位置</param>
static void _quick_sort(int[] array, int low, int high)
{
int pivotpos; //划分后的基准记录的位置
if (low < high)
{
//仅当区间长度大于1时才须排序
pivotpos = Partition(array, low, high); //对R[low..high]做划分
_quick_sort(array, low, pivotpos - 1); //对左区间递归排序
_quick_sort(array, pivotpos + 1, high); //对右区间递归排序
}
}
/// <summary>
/// 对array[low..high]做划分,并返回基准记录的位置
/// </summary>
/// <param name="array"></param>
/// <param name="i"></param>
/// <param name="j"></param>
/// <returns></returns>
static int Partition(int[] array, int i, int j)
{
int pivot = array[i]; //用区间的第1个记录作为基准
while (i < j)
{
//从区间两端交替向中间扫描,直至i=j为止
while (i < j && array[j] >= pivot) //pivot相当于在位置i上
j--; //从右向左扫描,查找第1个关键字小于基准值(pivot)的记录array[j]
if (i < j) //表示找到的R[j]的关键字<pivot.key
array[i++] = array[j]; //相当于交换R[i]和R[j],交换后i指针加1
Console.WriteLine(" ");
foreach (int var in array)
{
Console.Write(var + " ");
}
while (i < j && array[i] <= pivot) //pivot相当于在位置j上
i++; //从左向右扫描,查找第1个关键字大于pivot.key的记录R[i]
if (i < j) //表示找到了R[i],使R[i].key>pivot.key
array[j--] = array[i]; //相当于交换R[i]和R[j],交换后j指针减1
Console.WriteLine(" ");
foreach (int var in array)
{
Console.Write(var + " ");
}
}
array[i] = pivot; //基准记录已被最后定位
return i;
}
}
调用示例
int[] array = { 49, 38, 65, 97, 76, 13, 27, 49 };
QuickSort.quick_sort(array);
Console.ReadKey();

浙公网安备 33010602011771号