public static List <T> QuickSort <T>(this List <T> list, ComparatorDelegate <T> comparator) { List <T> retVal = new List <T>(list); retVal.QuickSort(comparator, 0, list.Count - 1); return(retVal); //if (list.Count <= 1) { // return list; //} //T median = list[0]; //List<T> ltList = new List<T>(); //List<T> equalList = new List<T>(); //List<T> gtList = new List<T>(); //foreach (T t in list) { // if (comparator(t, median) < 0) { // ltList.Add(t); // } // if (comparator(t, median) == 0) { // equalList.Add(t); // } // else if (comparator(t, median) > 0) { // gtList.Add(t); // } //} //List<T> sortedLtList = QuickSort(ltList, comparator); //List<T> sortedGtList = QuickSort(gtList, comparator); //sortedLtList.AddRange(equalList); //sortedLtList.AddRange(sortedGtList); //return sortedLtList; }
public static List <T> QuickSort <T>(List <T> list, ComparatorDelegate <T> comparator) { if (list.Count <= 1) { return(list); } T median = list[0]; List <T> ltList = new List <T>(); List <T> equalList = new List <T>(); List <T> gtList = new List <T>(); foreach (T t in list) { if (comparator(t, median) < 0) { ltList.Add(t); } if (comparator(t, median) == 0) { equalList.Add(t); } else if (comparator(t, median) > 0) { gtList.Add(t); } } List <T> sortedLtList = QuickSort(ltList, comparator); List <T> sortedGtList = QuickSort(gtList, comparator); sortedLtList.AddRange(equalList); sortedLtList.AddRange(sortedGtList); return(sortedLtList); }
public LevelDBComparator(string name, ComparatorDelegate comparator) { Name = name; Comparator = comparator; namePointer = Marshal.StringToHGlobalAnsi(name); comparatorName = delegate { return((void *)namePointer); }; this.comparator = (_, k1, klen1, k2, klen2) => { return(Comparator(new ReadOnlySpan <byte>(k1, (int)klen1), new ReadOnlySpan <byte>(k2, (int)klen2))); }; nativePointer = Native.comparator_create(null, emptyDestructor, this.comparator, comparatorName); }
private static void QuickSort <T>(this List <T> list, ComparatorDelegate <T> comparator, int low, int high) { if (low >= high) { return; } T median = list[high]; int i = low; for (int j = low; j < high; j++) { if (comparator(list[j], median) < 0) { list.Swap(i, j); i++; } } list.Swap(i, high); list.QuickSort(comparator, low, i - 1); list.QuickSort(comparator, i + 1, high); }