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();