快排在大规模元素(》100)被证明几乎是效率最高的排序方法, 也是一种分而治之算法的一个典型应用。
快排的思想是:
1)每次选定一个元素作为pivot, 利用pivot对数组进行分区(partition)
2) 大的放在pivot的后面,小的放在pivot前面
3)递归的对新生成的两个分区进行快排
代码如下:
public class QuickSortClass { public static void QuickSort(int[] array, int left, int right) { if (left < right) { int newPartition = Partition(array, left, right); QuickSort(array, left, newPartition - 1); QuickSort(array, newPartition + 1, right); } } public static int Partition(int[] array, int left, int right) { Console.WriteLine("partition, left={0}, right={1}", left, right); int pivot = array[right]; int j = left - 1, i = left; while (i < array.Length && j < array.Length) { if (array[i] > pivot) { i++; } else { j++; Swap(ref array[i], ref array[j]); i++; } } return j; } private static void Swap(ref int a, ref int b) { int t = a; a = b; b = t; } public static void PrintArray(int[] array) { for (int i = 0; i < array.Length; i++) { Console.WriteLine(array[i]); } } }