快速排序参数

Quick sort parameters

本文关键字:参数 快速排序      更新时间:2023-10-16

我正在尝试将QuickSort片段应用于我的程序;但是,我发现的大量教程或示例都没有用外行的术语来解释我在第二个和第三个参数中使用的内容,最常见于左右参数;这些解释的用语不足以让我理解。

逐字段落;如果有任何问题,我深表歉意。

void quickSort(int arr[], int left, int right) 
{
    int i = left, j = right;
    int tmp;
    int pivot = arr[(left + right) / 2];
      /* partition */
    while (i <= j) 
    {
        while (arr[i] < pivot)
            i++;
        while (arr[j] > pivot)
            j--;
        if (i <= j)
        {
            tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++;
            j--;
        }
    };
      /* recursion */
    if (left < j)
    quickSort(arr, left, j);
    if (i < right)
    quickSort(arr, i, right);
}

我知道第一个参数是要排序的数组,但是关于该数组的确切是什么,我传递给"左"answers"对?"

我已经编码了几年,但是我没有最好的指导,因此,如果对您进行补救,请对我进行教育。

leftright是索引中的数组,以分类用于QuickSort调用的当前调用。

首次在顶级拨打QuickSort时,leftright是完整的数组。例如:

int arr[] = { 3,4,6,2,5,6,6,7,4,4,6,5,3,6,7,8,8,6,4,3 };
quicksort(arr, 0, 19);

在我回答之前有一个点,

while (i <= j) 
{
    while (arr[i] < pivot)
        i++;
        while (arr[j] > pivot)
            j--;
            if (i <= j) 
            {
                tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
                i++;
                j--;
            }
};

您的代码的这一部分具有一个WILE循环,该循环被错误地缩进,因此有点混乱。

因此,左侧和右边是您所需数组的左右索引。

假设我们有一个数组 [1, 4, 5, 6, 3] 快速排序的分类部分将将数组安排到 [1, 4, 3, 6, 5]

发生的事情是您会有递归电话 quickSort(arr, 0, 2) quickSort(arr, 3, 4) 因此,一个QuickSort将根据左侧(索引0)对右(索引2)进行排序,而另一个将在右侧(索引3)(索引4)(索引4)上的QuickSort底座对其进行排序,直到数组达到长度&lt&lt;1