排序算法--快速排序

实现逻辑

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

输出结果:

相关推荐
helloworldandy19 分钟前
高性能图像处理库
开发语言·c++·算法
2401_8365631820 分钟前
C++中的枚举类高级用法
开发语言·c++·算法
EmbedLinX1 小时前
C++ 面向对象
开发语言·c++
weixin_445402301 小时前
C++中的命令模式变体
开发语言·c++·算法
Hgfdsaqwr1 小时前
实时控制系统优化
开发语言·c++·算法
CSDN_RTKLIB1 小时前
Visual Studio不改变文件编码情况下解决C2001
c++·ide·visual studio
D_evil__1 小时前
【Effective Modern C++】第三章 转向现代C++:15. 尽可能使用constexpr
c++
2301_821369611 小时前
嵌入式实时C++编程
开发语言·c++·算法
sjjhd6522 小时前
多核并行计算优化
开发语言·c++·算法
田野追逐星光2 小时前
STL的容器vector的模拟实现
开发语言·c++