public void QuickSelectTest()
        {
            var r = new Random();

            float[] d = Enumerable.Range(0, 100).Select(i => (float)r.NextDouble()).ToArray();

            var dSorted = new List <float>(d);

            dSorted.Sort();

            int[] indices = Enumerable.Range(0, d.Length).ToArray();
            int   n       = 30;

            QuickSelect.Select(indices, 0, d.Length - 1, n, i => d[i]);

            var selectedD = indices.Select(i => d[i]).ToArray();

            for (int i = 0; i < n; i++)
            {
                Assert.IsTrue(selectedD[i] < selectedD[n]);
            }

            float limit = d[indices[n]];

            Assert.AreEqual(30, d.Count(x => x < limit));
        }
示例#2
0
 public void SelectWithComparerTest_KGreaterOrEqualThanN()
 {
     Point[] points = new Point[10];
     for (int i = 0; i < 10; i++)
     {
         points[i] = new Point(i, 10 - i);
     }
     QuickSelect.Select(points, Point.X_ORDER, 10);
 }
示例#3
0
 public void SelectWithComparerTest_KLessThan0()
 {
     Point[] points = new Point[10];
     for (int i = 0; i < 10; i++)
     {
         points[i] = new Point(i, 10 - i);
     }
     QuickSelect.Select(points, Point.X_ORDER, -1);
 }
        public void testSelectK()
        {
            var a = new[]
            {
                1, 3, 5, 2, 4, 6, 0
            };

            Assert.Equal(3, QuickSelect.Select(a, 3, (a1, b) => a1 - b));
        }
示例#5
0
        public void SelectWithComparerTest_NullComparer()
        {
            Point[] points = new Point[10];
            for (int i = 0; i < 10; i++)
            {
                points[i] = new Point(i, 10 - i);
            }

            QuickSelect.Select(points, null, 1);
        }
示例#6
0
        public void SelectTest()
        {
            String[] a = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
            Shuffle.Do(a);

            String v = QuickSelect.Select(a, 3) as String;

            Assert.IsNotNull(v);
            Assert.AreEqual("3", v);
            for (int i = 0; i < 3; i++)
            {
                Assert.IsTrue(SortHelper.Less(a[i], v));
            }
            Assert.AreEqual(a[3], v);
        }
示例#7
0
        public void SelectWithComparerTest()
        {
            Point[] points = new Point[10];
            for (int i = 0; i < 10; i++)
            {
                points[i] = new Point(i, 10 - i);
            }
            Shuffle.Do(points);

            Point v = QuickSelect.Select(points, Point.X_ORDER, 3) as Point;

            Assert.IsNotNull(v);
            Assert.AreEqual(3, v.X);
            Assert.AreEqual(7, v.Y);
            for (int i = 0; i < 3; i++)
            {
                Assert.IsTrue(SortHelper.Less(Point.X_ORDER, points[i], v));
            }
            Assert.AreEqual(points[3], v);
        }
示例#8
0
 public int FindKthLargest(int[] nums, int k)
 {
     return(QuickSelect.Select(nums, 0, nums.Length - 1, nums.Length - k + 1));
 }
示例#9
0
 public void SelectWithComparerTest_NullArray()
 {
     QuickSelect.Select(null, Point.X_ORDER, 1);
 }
示例#10
0
 public void SelectTest_KGreaterOrEqualThanN()
 {
     String[] a = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
     QuickSelect.Select(a, 10);
 }
示例#11
0
 public void SelectTest_KLessThan0()
 {
     String[] a = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
     QuickSelect.Select(a, -1);
 }
示例#12
0
 public void SelectTest_NullArray()
 {
     QuickSelect.Select(null, 1);
 }