Esempio n. 1
0
        /// <summary>
        /// Быстрая сортировка - нерекурсивная реализация со вспомогательной сортировкой вставками
        /// </summary>
        public static void QuickSortStackedInsertion(List <Item> data, int l, int r)
        {
            Stack <int> s = new Stack <int>();

            s.Push(r);
            s.Push(l);
            int M = 9;

            while (s.Count != 0)
            {
                l = s.Pop();
                r = s.Pop();
                if (r - 1 < M)
                {
                    continue;
                }
                int i = Partition(data, l, r);
                if (i - 1 < r - i && r > l)
                {
                    s.Push(i - 1);
                    s.Push(l);
                    s.Push(r);
                    s.Push(i + 1);
                }
                else if (r > l)
                {
                    s.Push(r);
                    s.Push(i + 1);
                    s.Push(i - 1);
                    s.Push(l);
                }
            }
            Insertion.InsertionSortLv3(data, l, r);
        }