//快速排序是对冒泡排序的改进,
//时间复杂度最好是O(nlogn),最坏是O(n^2),平均是O(nlogn),空间复杂度最好是O(logn),最坏是O(n),不稳定
#include <iostream>
using namespace std;
template <class T>
void QuickSort(T* numbers, int low, int high);
int main()
{
int low = 0, high = 0;
cin >> low >> high;
int data[100] = { 0 };
for (int i = low; i <= high; ++i)
cin >> data[i];
QuickSort(data, low, high);
for (int i = low; i <= high; ++i)
cout << data[i] << " ";
cout << endl;
system("pause");
return 0;
}
template <class T>
void QuickSort(T* numbers, int low, int high)//快速排序,参数是一个数组和上下两个数组的下标
{
if (numbers == NULL)//此处不要判断low<0和high>0等条件,否则出错,因为后面是要递归的
{
cout << "Error: invalid input!" << endl;
return;
}
if (low >= high) return;//函数结束条件,必须要有
int left = low, right = high;//定义新的下标,取代函数的参数,因为需要加减操作
T pivot = numbers[left];//取一个枢轴变量,一般取最左边的
while (left < right)//下标满足的条件
{
while (left < right && numbers[right] >= pivot)
{
--right;
}
numbers[left] = numbers[right];//numbers[right] < pivot
while (left < right && numbers[left] <= pivot)
{
++left;
}
numbers[right] = numbers[left];//numbers[left] > pivot
}
numbers[left] = pivot;//将该次循环的枢轴放入中间位置
//以left为分界进行分治,分别递归
QuickSort(numbers, low, left - 1);//low到left-1
QuickSort(numbers, left + 1, high);//left+1到high
}
八大排序之快速排序
最新推荐文章于 2024-02-18 00:00:18 发布