分治——快速排序
快速排序数组元素的思想:
1)设k=a[0],将k挪到适当位置,使得比k小的元素都在k左边,比k大的元素都在k右边,和k相等的,不关心在k左右出现均可(O(n)时间完成)
2)把k左边的部分快速排序
3)把k右边的部分快速排序
代码:
class Program { static void Main(string[] args) { int[] a = { 93, 27, 30, 2, 8, 12, 2, 8, 30, 89 }; QuickSort(a, 0, a.Length - 1); ArrayOutput(a); } /// <summary> /// 快速排序 /// </summary> /// <param name="a">要进行排序的数组</param> /// <param name="start">数组开始位置</param> /// <param name="end">数组结束位置</param> static void QuickSort(int[] a, int start, int end) { if (start >= end) return; int k = a[start]; int i = start; int j = end; while (i != j) { while (j > i && a[j] >= k) --j; a[i] = a[j]; while (i < j && a[i] <= k) ++i; a[j] = a[i]; } a[i] = k; QuickSort(a, start, i - 1); QuickSort(a, i + 1, end); } /// <summary> /// 输出数组元素 /// </summary> /// <param name="a">数组</param> static void ArrayOutput(int[] a) { for (int i = 0; i < a.Length; i++) { Console.Write(a[i] + " "); } Console.WriteLine(); } }