排序算法--快速排序

实现逻辑

① 从数列中挑出一个元素,称为 "基准"(pivot),

② 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

③ 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

cpp 复制代码
void print_array(int a[], int n){
	for (int i = 0; i < n; ++i){
		cout << a[i] << " ";
	}
	cout << endl;
}

template<typename T>
void quickSort(T arr[], int left, int right)
{
	if (left > right)
	{
		return;
	}

	T base = arr[left];
	int i = left;
	int j = right;
	while(i < j)
	{
		while (base <= arr[j] && i < j)
		{
			j--;
		}
		while (arr[i] <= base && i < j)
		{
			i++;
		}

		T temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}

	T temp = arr[left];
	arr[left] = arr[j];
	arr[j] = temp;

	quickSort(arr, left, i - 1);
	quickSort(arr, i + 1, right);
	return;
}

int main(){
	int arr[] = {10, 8, 11, 7, 4, 12, 9, 6, 5, 3};
	int len = sizeof(arr)/sizeof(arr[0]);
	
	cout << "排序前:";
	print_array(arr, len);

	quickSort<int>(arr, 0, len - 1);
	
	cout << "排序后:";
	print_array(arr, len);
	return 0;
}

输出结果:

相关推荐
旖-旎21 分钟前
二分查找(山脉数组的峰顶索引)(5)
c++·算法·leetcode·二分查找·力扣·双指针
阿贵---24 分钟前
单元测试在C++项目中的实践
开发语言·c++·算法
2401_8914821730 分钟前
C++中的事件驱动编程
开发语言·c++·算法
sw12138934 分钟前
C++与Rust交互编程
开发语言·c++·算法
2401_8579182938 分钟前
模板编译期机器学习
开发语言·c++·算法
2403_8355684743 分钟前
多平台UI框架C++开发
开发语言·c++·算法
yunyun321231 小时前
C++中的适配器模式
开发语言·c++·算法
朗迹 - 张伟1 小时前
UE5 C++学习笔记
c++·学习·ue5
扶摇接北海1761 小时前
洛谷:P5732 【深基5.习7】杨辉三角
数据结构·c++·算法
TTTrees1 小时前
C++学习笔记(30):智能指针(unique_ptr)
c++