Recursion 快速排序算法中的基本情况条件

Recursion 快速排序算法中的基本情况条件,recursion,quicksort,Recursion,Quicksort,对于快速排序算法Recursive,每次调用自身时,它都有条件ifp

对于快速排序算法Recursive,每次调用自身时,它都有条件ifp
void quickSort(int* arr, int p, int r)
{
    if(p < r)
    {
        int q = partition(arr,p,r);
        quickSort(arr,p,q-1);
        quickSort(arr,q+1,r);
    }
}
有关我的全部代码,请参考以下内容:

/*
filename   :  main.c
description:  quickSort algorithm
*/

#include<iostream>
using namespace std;


void exchange(int* val1, int* val2)
{
    int temp = *val1;
    *val1 = *val2;
    *val2 = temp;
}


int partition(int* arr, int p, int r)
{
     int x = arr[r];
     int j = p;
     int i = j-1;

     while(j<=r-1)
     {
        if(arr[j] <= x)
        {
            i++;
            // exchange arr[r] with arr[j]
            exchange(&arr[i],&arr[j]);
        }
        j++;
     }
     exchange(&arr[i+1],&arr[r]);
     return i+1;
}

void quickSort(int* arr, int p, int r)
{
    if(p < r)
    {
        int q = partition(arr,p,r);
        quickSort(arr,p,q-1);
        quickSort(arr,q+1,r);
    }
}








// driver program to test the quick sort algorithm
int main(int argc, const char* argv[])
{
    int arr1[] = {13,19,9,5,12,8,7,4,21,2,6,11};
    cout <<"The original array is: ";
    for(int i=0; i<12; i++)
    {
        cout << arr1[i] << " ";
    }
    cout << "\n";

    quickSort(arr1,0,11);

    //print out the sorted array

    cout <<"The sorted array is: ";

    for(int i=0; i<12; i++)
    {
        cout << arr1[i] << " ";
    }
    cout << "\n";

    cin.get();

    return 0;
}

你的问题不太清楚,但我会尽力回答

快速排序的工作原理是对越来越小的数组进行排序。基本情况是一个少于2个元素的数组,因为不需要排序

在每一步中,它都会找到一个分区值,并使分区值左侧的所有值都较小,而分区值右侧的所有值都较大。换句话说,它将分区值放在正确的位置。然后它递归地将数组排序到分区的左侧,将数组排序到分区的右侧

快速排序的基本情况是具有一个元素的数组,因为一个元素数组不需要排序。在代码中,p是第一个元素的索引,r是最后一个元素的索引。谓词p=r,那么就有一个大小为1或0的数组,或者是无意义的数组,并且没有做功