排序算法--快速排序

实现逻辑

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

输出结果:

相关推荐
mochensage30 分钟前
CSP信奥赛C++常用系统函数汇总
c++·信奥
mochensage31 分钟前
C++信息学竞赛中常用函数的一般用法
java·c++·算法
fpcc35 分钟前
跟我学c++中级篇——多线程中的文件处理
c++
5:001 小时前
云备份项目
linux·开发语言·c++
乄夜2 小时前
嵌入式面试高频(5)!!!C++语言(嵌入式八股文,嵌入式面经)
c语言·c++·单片机·嵌入式硬件·物联网·面试·职场和发展
YYDS3142 小时前
C++动态规划-01背包
开发语言·c++·动态规划
wydaicls3 小时前
十一.C++ 类 -- 面向对象思想
开发语言·c++
姜君竹3 小时前
QT的工程文件.pro文件
开发语言·c++·qt·系统架构
思捻如枫3 小时前
C++数据结构和算法代码模板总结——算法部分
数据结构·c++
weixin_478689764 小时前
C++ 对 C 的兼容性
java·c语言·c++