示例#1
0
 public static void BubbleSort <T>(ListSlice <T> list) where T : System.IComparable <T>, System.IComparable
 {
     for (int i = list.Count; i >= 1; i--)
     {
         for (int j = 1; j < i; j++)
         {
             list.SwapIfGreater(j - 1, j);
         }
     }
 }
示例#2
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));
            }
        }
示例#3
0
        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);
            }
        }