这个快速排序正确吗?

本文关键字:快速排序 | 更新日期: 2023-09-27 18:04:11

我将枢轴改为数组中的第一个元素,这种快速排序算法仍然可以吗?数据数组中的变量"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);
        }
    }

这个快速排序正确吗?

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);
            }
        }

你的逻辑不是好的,先试一下这个逻辑,理解它,它与你的相似,但略有不同