Recursion 快速排序算法中的基本情况条件
对于快速排序算法Recursive,每次调用自身时,它都有条件ifpRecursion 快速排序算法中的基本情况条件,recursion,quicksort,Recursion,Quicksort,对于快速排序算法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