排序算法--快速排序

实现逻辑

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

输出结果:

相关推荐
桃酥4033 分钟前
20、移动语义有什么作用,原理是什么【中高频】
c++
闻缺陷则喜何志丹3 分钟前
【二分查找、滑动窗口】P10389 [蓝桥杯 2024 省 A] 成绩统计|普及+
c++·算法·蓝桥杯·二分查找·滑动窗口·洛谷·成绩
商bol451 小时前
算阶,jdk和idea的安装
数据结构·c++·算法
yyytucj1 小时前
C/C++通过SQLiteSDK增删改查
c语言·jvm·c++
float_六七4 小时前
二叉树三种遍历方式——前序、中序、后序(C++)
开发语言·c++·算法
邦之彦9 小时前
C++:四大强制类型转换
开发语言·c++·static_cast·const_cast·dynamic_cast·reinterpretcast
柿柿快乐10 小时前
C++入门基础
开发语言·c++
ks不知火11 小时前
【仿muduo库one thread one loop式并发服务器实现】
linux·c++
mit6.82411 小时前
[Lc(2)滑动窗口_1] 长度最小的数组 | 无重复字符的最长子串 | 最大连续1的个数 III | 将 x 减到 0 的最小操作数
数据结构·c++·算法·leetcode
zjoy_223311 小时前
【数据结构】什么是栈||栈的经典应用||分治递归||斐波那契问题和归并算法||递归实现||顺序栈和链栈的区分
java·c语言·开发语言·数据结构·c++·算法·排序算法