C++快速排序

前两天面试过程中弱智了连快排没写出来,这里简单做一下个人向记录。

只需要挑选出枢轴以后简单左右比较,匹配即可,最后记得把枢轴调整到中间。

基础算法还是要掌握熟练的,对于跳出/边界/顺序等特殊情况最好在脑海中有一个大概的模拟。

# include<iostream>
# include<vector>
# include<algorithm>
using namespace std;

void quickSort(vector<int>& vec, int left_edge, int right_edge) {
	if (left_edge >= right_edge) {
		return;
	}
	int pivot = vec[left_edge];
	int left_pos = left_edge;
	int right_pos = right_edge;

	while (left_pos < right_pos) {
		for (; left_pos < right_pos; right_pos--) {
			if (vec[right_pos] < pivot) {
				break;
			}
		}
		for (; left_pos < right_pos; left_pos++) {
			if (vec[left_pos] > pivot) {
				break;
			}
		}

		if (left_pos < right_pos) {
			swap(vec[left_pos], vec[right_pos]);
		}
	}
	swap(vec[left_edge], vec[right_pos]);
	quickSort(vec, left_edge, right_pos-1);
	quickSort(vec, right_pos + 1, right_edge);
	return;
}

int main() {
	vector<int> test = { 3, 2, 5, 4, 1 ,7,4,21,6,3,51,2,111,7};
	quickSort(test, 0, test.size()-1);
	for (auto it : test) {
		cout << it << " " << endl;
	}
	return 0;
}
posted @ 2024-03-23 05:58  真昼小天使daisuki  阅读(15)  评论(0编辑  收藏  举报