예제 #1
0
    /// <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);
 }