算法通关村第十关青铜挑战——什么是快速排序

大家好,我是怒码少年小码。

快速排序

  1. 选取pivot中心轴
  2. 将大于pivot中心轴的元素放在中心轴的右边
  3. 将小于pivot中心轴的元素放在中心轴的左边
  4. 重复上述过程

实现方式一:

cpp 复制代码
void  quickSort(int arr[], int left, int right) {
	if (left < right) {
		int pivot = arr[right];
		int i = left - 1;
		for (int j = left; j < right; j++) {
			if (arr[j] < pivot) {
				i++;
				int temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
		//哨兵移动到位置pivotIndex上
		int pivotIndex = i + 1 ;
		int temp = arr[pivotIndex];
		arr[pivotIndex] = arr[right];
		arr[right] = temp;

		quickSort(arr, left, pivotIndex - 1);
		quickSort(arr, pivotIndex + 1, right);
	}
	//输出查看
	for (int i = 0; i < right + 1; i++) {
		cout << arr[i] << ",";
	}
	cout << endl;
}

看到这么多的代码是不是怕了呀,不怕,我们一起看。

这段代码中我们把pivot保存数组中最右边的元素为基准。定义一个变量i保存需要交换元素的前一个元素。定义一个变量j从左至右遍历数组判断是否需要交换。最后再用递归实现一直重复的过程。

实现方式二:

下面这种方式就更好理解了取中间结点为pivot,left和right用于遍历和比较,当满足left <= right 并且要找到不符合条件的元素后就停下来,执行交换。可以输出打印检查看看对不对。最后再递归地重复这个过程。

cpp 复制代码
void quickSort01(int arr[], int start, int end) {
	if (start >= end) {
		return;
	}
	int left = start, right = end;
	int pivot = arr[(start + end) / 2];

	while (left <= right) {
		while (left <= right && arr[left] < pivot) {
			left++;
		}
		while (left <= right && arr[right] > pivot) {
			right--;
		}
		if (left <= right) {
			int temp = arr[left];
			arr[left] = arr[right];
			arr[right] = temp;
			left++;
			right--;
		}
	}
	for (int i = 0; i < right + 1; i++) {
		cout << arr[i] << ",";
	}
	cout << endl;
	quickSort(arr, start, right);
	quickSort(arr, left, end);
}
相关推荐
辞忧九千七5 分钟前
吃透Redis7核心数据结构:从基础用法到实战场景(Python版)
开发语言·数据结构·redis·python
悠仁さん7 分钟前
数据结构 树 二叉树 堆 (链式二叉树模拟实现篇)
数据结构·算法
z2005093018 分钟前
今日算法(带回文问题的回溯)
算法·leetcode·回溯
洛水水19 分钟前
【力扣100题】55.编辑距离
算法·leetcode·动态规划
人间乄惊鸿客20 分钟前
c++自记录
java·开发语言·c++
better_liang22 分钟前
每日Java面试场景题知识点之-MySQL底层数据结构B+树
java·数据结构·mysql·性能优化·面试题·b+树·数据库索引
MC皮蛋侠客26 分钟前
C++17 多线程系列(一):线程基础——std::thread 完全指南
开发语言·c++·多线程
洛水水33 分钟前
【力扣100题】62.滑动窗口最大值
数据结构·算法·leetcode
IronMurphy37 分钟前
算法五十一 64. 最小路径和
算法
醒醒该学习了!41 分钟前
Prompt提示词——带有深度思考模型的提示方法(理论篇)
人工智能·算法·prompt