方案一
每次采用最后一个元素作为 pivot,代码如下:
template<typename T>
int partitionArray(T arr[], int low, int high)
{
T pivot = arr[high];
int i = low - 1;
for(int j = low; j < high; ++j)
if(arr[j] <= pivot)
std::swap(arr[++i], arr[j]);
std::swap(arr[++i], arr[high]);
return i;
}
template<typename T>
void quickSort(T arr[], int low, int high)
{
if(low < high)
{
int mid = partitionArray(arr, low, high);
quickSort(arr, low, mid - 1);
quickSort(arr, mid + 1, high);
}
}
方案二
每次采用第一个元素作为 pivot, 代码如下:
template<typename T>
void quickSort(T arr[], int low, int high)
{
if(low >= high) return;
int first = low, last = high;
// 每次取第一个当作枢轴点
T pivot = arr[first];
while(first < last)
{
while(first < last && arr[last] >= pivot) --last;
arr[first] = arr[last];
while(first < last && arr[first] <= pivot) ++first;
arr[last] = arr[first];
}
arr[first] = pivot;
quickSort(arr, low, first - 1);
quickSort(arr, first + 1, high);
}