排序算法--快速排序

实现逻辑

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

输出结果:

相关推荐
AI街潜水的八角6 分钟前
基于C++的决策树C4.5机器学习算法(不调包)
c++·算法·决策树·机器学习
JSU_曾是此间年少36 分钟前
数据结构——线性表与链表
数据结构·c++·算法
此生只爱蛋2 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
何曾参静谧2 小时前
「C/C++」C/C++ 指针篇 之 指针运算
c语言·开发语言·c++
lulu_gh_yu3 小时前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
ULTRA??3 小时前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
凌云行者4 小时前
OpenGL入门005——使用Shader类管理着色器
c++·cmake·opengl
凌云行者4 小时前
OpenGL入门006——着色器在纹理混合中的应用
c++·cmake·opengl
~yY…s<#>4 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
可均可可5 小时前
C++之OpenCV入门到提高004:Mat 对象的使用
c++·opencv·mat·imread·imwrite