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; } }
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]; } } }