这个Quicksort是正确的吗?

时间:2016-08-27 10:05:48

标签: c# quicksort

我将数据库更改为数组中的第一个元素,这个Quicksort算法仍然可以吗?变量" l"在数据数组中是所有分区步骤中的第一个元素吗?

x = data [l] // pivot

感谢

  public void QuickSort(int[] data)
    {
        QuickSort(data, 0, data.Length - 1);

    }
    private void QuickSort(int[] data, int l, int r)
    {
        int i, j;
        int x;
        i = l;
        j = r;
        x = data[l];
        while (true)
        {
            while (data[i] < x)
            {
                i++;
            }
            while (data[j] > x)
            {
                j--;
            }
            if (l <= j)
            {
                int temporary = data[i];
                data[i] = data[j];
                data[j] = temporary;
                i++;
                j--;
            }
            if (i > j)
            {
                break;
            }
        }
        if (l < j)
        {
            QuickSort(data, l, j);
        }
        if (i < r)
        {
            QuickSort(data, i, r);
        }

    }

1 个答案:

答案 0 :(得分:0)

static public int Partition(int[] numbers, int left, int right)
        {
            int pivot = numbers[left];
            while (true)
            {
                while (numbers[left] < pivot)
                    left++;

                while (numbers[right] > pivot)
                    right--;

                if (left < right)
                {
                    int temp = numbers[right];
                    numbers[right] = numbers[left];
                    numbers[left] = temp;
                }
                else
                {
                    return right;
                }
            }
        }

        static public void QuickSort(int[] arr, int left, int right)
        {
            // For Recusrion  
            if (left < right)
            {
                int pivot = Partition(arr, left, right);

                if (pivot > 1)
                    QuickSort(arr, left, pivot - 1);

                if (pivot + 1 < right)
                    QuickSort(arr, pivot + 1, right);
            }
        }

你的逻辑不合适尝试这个逻辑首先理解它与你的相似但略有不同