using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 快速排序法 { class Program { static void QuickSort(int[] dataArray, int left, int right) { if (left < right) { //设置一个key基值,且key位为左第一位(left位) int key = dataArray[left]; //指向左(第一个) int i = left; //指向右(最后一个) int j = right; //左大于右时才有意义 while (i < j) { while (i < j) { //从array的右边最大位(j位)开始,找到一个小于或等于基准的数,找到后就放去左边的key位,此时的j位为坑位 //如果j位的数据不小于等于key,将降(j--)次继续while循环,直到j=i时,还是没有满足条件的时,此循环返回,此时的j位就等于初始的left位(i=left) if (dataArray[j] <= key) { dataArray[i] = dataArray[j]; //找到一位满足条件后就返回(也就是一个大循环只进行一次交换) break; } else { j--; } } while (i < j) { //从array的左边i位开始,(i-j这个区间中),找一个大于key的数据,找到后就放去右边的j位,如果直到i=j时仍没有满足条件的,此循环返回,此时i=j, if (dataArray[i] > key) { dataArray[j] = dataArray[i]; break; } else { i++; } } } //跳出循环,现在i==j i是中间位置 dataArray[j] = key; QuickSort(dataArray, left, i - 1); QuickSort(dataArray, i + 1, right); } } static void Main(string[] args) { int[] array = { 42, 20, 17, 27, 13, 8, 17, 48,4,6,75,23,434,544,444,8,54353,8 }; QuickSort(array, 0, array.Length - 1); for (int i = 0; i < array.Length; i++) { Console.Write(array[i] + ","); } Console.ReadKey(); } } }