Ejemplo n.º 1
0
        public static void Sort(IList <T> list, bool isAsc)
        {
            int       length     = 1;
            IList <T> sortedList = new List <T>(list.Count);

            foreach (T local in list)
            {
                sortedList.Add(local);
            }
            while (length < list.Count)
            {
                MergeSorter <T> .MergePass(list, sortedList, length, isAsc);

                length *= 2;
                MergeSorter <T> .MergePass(sortedList, list, length, isAsc);

                length *= 2;
            }
        }
Ejemplo n.º 2
0
        private static void MergePass(IList <T> list, IList <T> sortedList, int length, bool isASC)
        {
            int startIndx = 0;

            while (startIndx <= (list.Count - (2 * length)))
            {
                MergeSorter <T> .Merge(list, startIndx, (startIndx + length) - 1, (startIndx + (2 * length)) - 1, sortedList, isASC);

                startIndx += 2 * length;
            }
            if ((startIndx + length) < list.Count)
            {
                MergeSorter <T> .Merge(list, startIndx, (startIndx + length) - 1, list.Count - 1, sortedList, isASC);
            }
            else
            {
                for (int i = startIndx; i < list.Count; i++)
                {
                    sortedList[i] = list[i];
                }
            }
        }