private static int Partition(IComparable[] a, int lo, int hi)
        {
            int         i = lo, j = hi + 1;
            IComparable v = a[lo];

            while (true)
            {
                while (SortHelper.Less(a[++i], v))
                {
                    if (i == hi)
                    {
                        break;
                    }
                }
                while (SortHelper.Less(v, a[--j]))
                {
                    if (j == lo)
                    {
                        break;
                    }
                }
                if (i >= j)
                {
                    break;
                }
                SortHelper.Exchange(a, i, j);
            }
            SortHelper.Exchange(a, lo, j);
            return(j);
        }
        private static int Partition <Key>(Key[] a, IComparer <Key> c, int lo, int hi) where Key : class
        {
            int i = lo, j = hi + 1;
            Key v = a[lo];

            while (true)
            {
                while (SortHelper.Less(c, a[++i], v))
                {
                    if (i == hi)
                    {
                        break;
                    }
                }
                while (SortHelper.Less(c, v, a[--j]))
                {
                    if (j == lo)
                    {
                        break;
                    }
                }
                if (i >= j)
                {
                    break;
                }
                SortHelper.Exchange(a, i, j);
            }
            SortHelper.Exchange(a, lo, j);
            return(j);
        }
Example #3
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);
        }
Example #4
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);
        }