/// <summary> /// 找到一组数中第k小元素 最坏时间复杂度O^2 期望时间复杂度O(n) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="a"></param> /// <param name="k"></param> /// <returns></returns> public static T Select <T>(T[] a, int k) { RandomAlgorithm.Shuffle <T>(a); int lo = 0, hi = a.Length - 1; while (hi > lo) { int j = QuickSort <T> .Partition(a, lo, hi); if (j == k) { return(a[k]); } else if (j > k) { hi = j - 1; } else if (j < k) { lo = j + 1; } } return(a[k]); }
public static void Sort(T[] a) { RandomAlgorithm.Shuffle <T>(a); Sort(a, 0, a.Length - 1); }