private static void MergeSort <T>(ListSlice <T> list) where T : System.IComparable, System.IComparable <T> { if (list.Count > 2) { int mid = list.Count / 2; var left = list.GetSlice(0, mid); var right = list.GetSlice(mid, list.Count - mid); MergeSort(left); MergeSort(right); Merging(left, right); } else { list.SwapIfGreater(0, list.Count - 1); } }
private static void MergeInsertionSort <T>(ListSlice <T> list, int threshold = 100) where T : System.IComparable <T>, System.IComparable { if (list.Count > 10) { int mid = list.Count / 2; var left = list.GetSlice(0, mid); var right = list.GetSlice(mid, list.Count - mid); MergeInsertionSort(left); MergeInsertionSort(right); Merging(left, right); } else { InsertionSort(list); } }
public static void HeapSort <T>(ListSlice <T> list) where T : System.IComparable <T>, System.IComparable { for (int i = list.Count / 2 - 1; i >= 0; i--) { heapify(list, i); } for (int i = list.Count - 1; i >= 0; i--) { list.Swap(0, i); heapify(list.GetSlice(0, i), 0); } }
private static void QuickSort <T>(ListSlice <T> list) where T : System.IComparable <T>, System.IComparable { if (list.Count == 3) { list.SwapIfGreater(0, 2); list.SwapIfGreater(1, 2); list.SwapIfGreater(0, 1); } else if (list.Count == 2) { list.SwapIfGreater(0, 1); } else if (list.Count <= 16) { InsertionSort(list); } else if (list.Count > 3) { int mid = Partation(list); QuickSort(list.GetSlice(0, mid)); QuickSort(list.GetSlice(mid + 1, list.Count - mid - 1)); } }