排序算法-快速排序
实现:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _008_快速排序 { class Program { static void Main(string[] args) { int[] data = new int[] { 42, 20, 17, 27, 13, 8, 17, 48,65 }; QuickSort(data,0,data.Length-1); for (int i = 0; i < data.Length; i++) { Console.Write(data[i] + " "); } } private static void QuickSort(int[] dataArray, int left, int right) { if (left < right) { int middle = partition(dataArray, left, right); QuickSort(dataArray, left, middle - 1); QuickSort(dataArray, middle + 1, right); } } /// <summary> /// 对数据dataArray中索引从left到right之间得数做排序 /// </summary> /// <param name="data">要排序得数组</param> /// <param name="left">要排序数据得开始索引</param> /// <param name="right">要排序数据得结束索引</param> private static int partition(int[] dataArray, int left,int right) { //基准数 //把比它小或者等于它的 放在它的左边 //比它大的 放在它的右边 int x = dataArray[left]; while (left<right)//当left=right说明我们找到了 中间位置,这个中间位置就是基准数应该所在的位置 { //从后往前比较 (从右向左比较)找一个比x小(或者等)的数字,放在我们的坑里,坑位于left的位置 while (left < right && dataArray[right] >= x) right--;//向左移动 到下一个数字,然后做比较 //当循环跳出时就找到一个比基准数 小于或者等于的数,应该把它放在x的左边 dataArray[left] = dataArray[right]; //从前往后比较 (从左向右比较)找一个比x大的数字,放在我们的坑里,现在的坑位于j的位置 while (left < right && dataArray[left] <= x) left++;//向右移动 到下一个数字,然后做比较 //当循环跳出时就找到一个比基准数 大于数,应该把它放在x的右边 dataArray[right] = dataArray[left]; } //跳出循环 现在left==right left是中间位置 dataArray[left] = x; //left-x-right return left; } } }