方案一
每次采用最后一个元素作为 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);
}
本文详细介绍了快速排序算法的两种实现方案,包括选择数组末尾元素和开头元素作为基准值的策略,并通过代码实例进行了说明。
2349

被折叠的 条评论
为什么被折叠?



