实现:
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); } } ////// 对数据dataArray中索引从left到right之间得数做排序 /// /// 要排序得数组 /// 要排序数据得开始索引 /// 要排序数据得结束索引 private static int partition(int[] dataArray, int left,int right) { //基准数 //把比它小或者等于它的 放在它的左边 //比它大的 放在它的右边 int x = dataArray[left]; while (left= x) right--;//向左移动 到下一个数字,然后做比较 //当循环跳出时就找到一个比基准数 小于或者等于的数,应该把它放在x的左边 dataArray[left] = dataArray[right]; //从前往后比较 (从左向右比较)找一个比x大的数字,放在我们的坑里,现在的坑位于j的位置 while (left < right && dataArray[left] <= x) left++;//向右移动 到下一个数字,然后做比较 //当循环跳出时就找到一个比基准数 大于数,应该把它放在x的右边 dataArray[right] = dataArray[left]; } //跳出循环 现在i==j i是中间位置 dataArray[left] = x; //left-x-right return left; } }}