设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。 优点:极快,数据移动少;O(nlog n) 期望时间,O(n^2) 最坏情况 缺点:不稳定。
View Code
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 快速排序 { class Program { public static void Sort(int[] numbers) { Sort(numbers, 0, numbers.Length - 1); } private static void Sort(int[] numbers, int left, int right) { if (left < right) { int middle = numbers[(left + right) / 2]; int i = left - 1; int j = right + 1; while (true) { while (numbers[++i] < middle) { Console.WriteLine(""); } while (numbers[--j] > middle) { Console.WriteLine(""); } if (i >= j) break; //Swap int number = numbers[i]; numbers[i] = numbers[j]; numbers[j] = number; } Sort(numbers, left, i - 1); Sort(numbers, j + 1, right); } } static void Main(string[] args) { int[] array = new int[] { 2, 4, 5, 1,3 }; Sort(array); for(int i=0;i<array.Length;i++) { Console.WriteLine(array[i]+" "); } } } }