前言
快速排序是一种常见的排序算法,相比冒泡排序等算法在时间复杂度上有着较大的优势
一、快速排序
核心思想:对所有元素进行分区,使得在下标s前的元素的值都小于等于下标为s的元素值,之后的则大于s位置的元素值
建立这样的分区后,下标为s的元素所在的位置与目标升序数组中的位置相同;接下来就是对前后两个分区的数据使用同样的方式进行分区;直到每一个分区都只有一个元素
// 将数组分区,并返回基准元素的索引
int partition(vector<int>& arr,int leftbound,int rightbound)
{
int leftptr = leftbound+1;
int rightptr = rightbound;
int pivot = arr[leftbound];
while(leftptr <= rightptr)
{
while(leftptr <= rightptr && arr[leftptr] < pivot)
{
leftptr++;
}
while(leftptr <= rightptr&& arr[rightptr] >= pivot)
{
rightptr--;
}
if(leftptr < rightptr)
{
swap(arr,leftptr,rightptr);
}
}
swap(arr,leftbound,rightptr);
return rightptr;
}
// 快速排序
void quickSort(vector<int>& arr, int low, int high) {
if (low < high) {
int pivotIndex = partition(arr, low, high); // 将数组分区
quickSort(arr, low, pivotIndex - 1); // 对左侧子数组进行快速排序quickSort(arr, pivotIndex + 1, high); // 对右侧子数组进行快速排序
}
}
// 打印数组
void printArray(const vector<int>& arr) {
for (int num : arr) {
cout << num << " ";
}
cout << endl;
}
int main() {
vector<int> arr = {7, 2, 6, 3, 8, 1, 4, 5};
int n = arr.size();cout << "原始数组: ";
printArray(arr);
quickSort(arr, 0, n - 1);cout << "排序后的数组: ";
printArray(arr);
return 0;
}
更多内容可以参考:
快速排序法(详解)
六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序