コード例 #1
0
        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;
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 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);
 }
コード例 #4
0
        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);
        }