排序算法--快速排序

实现逻辑

① 从数列中挑出一个元素,称为 "基准"(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;
}

输出结果:

相关推荐
xiaoye-duck2 分钟前
归并排序:递归与非递归全解析
数据结构·排序算法
@卞33 分钟前
高阶数据结构 --- 单调队列
数据结构·c++·算法
fpcc1 小时前
并行编程实战——CUDA编程的流的优先级
c++·cuda
勇闯逆流河3 小时前
【C++】C++11(下)
开发语言·c++
胡萝卜3.09 小时前
掌握C++ map:高效键值对操作指南
开发语言·数据结构·c++·人工智能·map
电子_咸鱼10 小时前
【STL string 全解析:接口详解、测试实战与模拟实现】
开发语言·c++·vscode·python·算法·leetcode
月夜的风吹雨12 小时前
【封装红黑树】:深度解析map和set的底层实现
c++·set·map·封装
列逍12 小时前
深入理解 C++ 智能指针:原理、使用与避坑指南
开发语言·c++
C语言小火车13 小时前
C/C++ 指针全面解析:从基础到进阶的终极指南
c语言·开发语言·c++·指针
wefg113 小时前
【C++】特殊类设计
开发语言·c++