public int[] Sort(int[] arr)
        {
            int length = arr.Length;

            for (int i = 0; i < length - 1; i++)
            {
                for (int j = 0; j < length - i - 1; j++)
                {
                    if (arr[j + 1] < arr[j])
                    {
                        SortHelp.Swap(arr, j, j + 1);
                    }
                }
            }
            return(arr);
        }
Exemplo n.º 2
0
        public int[] Sort(int[] arr)
        {
            int length = arr.Length;

            for (int i = 0; i < length; i++)
            {
                for (int j = i + 1; j < length - 1; j++)
                {
                    if (arr[j] < arr[i])
                    {
                        SortHelp.Swap(arr, i, j);
                    }
                }
            }

            return(arr);
        }
        /*
         * Heap Sort:Heap sort is a comparison based sorting technique based on Binary Heap data structure.
         * 1. Build a max heap from the input data.
         * 2. 第一个元素和最后一个元素交换位置,然后 heaptiy 第一个元素
         * 3. 重复交换,重复堆化
         * Time Complexity: O(nlogn)
         */
        public int[] Sort(int[] arr)
        {
            int arrsize = arr.Length;
            int index   = arrsize / 2 - 1;

            for (int i = index; i >= 0; i--)
            {
                Heapify(arr, arrsize, i);
            }

            for (int i = arrsize - 1; i >= 0; i--)
            {
                SortHelp.Swap(arr, i, 0);

                Heapify(arr, i, 0);
            }

            return(arr);
        }
Exemplo n.º 4
0
        public int[] Sort(int[] arr)
        {
            int length = arr.Length;

            for (int gap = length / 2; gap > 0; gap /= 2)
            {
                for (int i = gap; i < length; i++)
                {
                    for (int j = i; j - gap >= 0; j -= gap)
                    {
                        if (arr[j] < arr[j - gap])
                        {
                            SortHelp.Swap(arr, j, j - gap);
                        }
                    }
                }
            }

            return(arr);
        }
Exemplo n.º 5
0
        private int[] QuickSort(int[] arr, int left, int right)
        {
            if (left < right)
            {
                int pivot = Pivot(arr, left, right);

                int i = left;
                int j = right - 1;

                for (; ;)
                {
                    while (i < arr.Length && arr[++i] < pivot)
                    {
                    }

                    while (j > 0 && arr[--j] > pivot)
                    {
                    }

                    if (i < j)
                    {
                        SortHelp.Swap(arr, i, j);
                    }
                    else
                    {
                        break;
                    }
                }
                // 把锚点交换成正确的位置
                if (i < right - 1)
                {
                    SortHelp.Swap(arr, i, right - 1);
                }

                QuickSort(arr, left, i - 1);

                QuickSort(arr, i + 1, right);
            }

            return(arr);
        }
        public void Heapify(int[] arr, int arrsize, int index)
        {
            int left   = 2 * index + 1;
            int right  = 2 * index + 2;
            int larget = index;

            if (left > 0 && left < arrsize && arr[left] > arr[larget])
            {
                larget = left;
            }
            if (right > 0 && right < arrsize && arr[right] > arr[larget])
            {
                larget = right;
            }
            if (larget != index)
            {
                SortHelp.Swap(arr, index, larget);

                Heapify(arr, arrsize, larget);
            }
        }
Exemplo n.º 7
0
        private int Pivot(int[] arr, int left, int right)
        {
            int center = (left + right) / 2;

            if (arr[left] > arr[center])
            {
                SortHelp.Swap(arr, left, center);
            }
            if (arr[right] < arr[left])
            {
                SortHelp.Swap(arr, left, right);
            }
            if (arr[right] < arr[center])
            {
                SortHelp.Swap(arr, right, center);
            }
            // 如果只有三个数,那么前面的步骤已经排序
            if (left + 2 < right)
            {
                SortHelp.Swap(arr, center, right - 1);
            }
            return(arr[right - 1]);
        }