Beispiel #1
0
        public static void QuickSort(int[] array)
        {
            Sort(0, array.Length - 1);

            void Sort(int low, int high)
            {
                if (high <= low)
                {
                    return;
                }

                int j = Partition(low, high);

                Sort(low, j - 1);
                Sort(j + 1, high);
            }

            int Partition(int low, int high)
            {
                int i     = low;
                int j     = high + 1;
                int pivot = array[low];

                while (true)
                {
                    while (array[++i] < pivot)
                    {
                        if (i == high)
                        {
                            break;
                        }
                    }
                    while (pivot < array[--j])
                    {
                        if (j == low)
                        {
                            break;
                        }
                    }
                    if (i >= j)
                    {
                        break;
                    }
                    Reuse.Swap(array, i, j);
                }
                Reuse.Swap(array, low, j);
                return(j);
            }
        }
Beispiel #2
0
        public static void Shell(int[] array)
        {
            int gap = 1;

            while (gap < array.Length / 3)
            {
                gap = 3 * gap + 1;
            }

            while (gap >= 1)
            {
                for (int i = gap; i < array.Length; i++)
                {
                    for (int j = i; j >= gap && array[j] < array[j - gap]; j -= gap)
                    {
                        Reuse.Swap(array, j, j - gap);
                    }
                }
                gap /= 3;
            }
        }