文章

19

粉丝

0

获赞

125

访问

2.9k

头像
快速排序 - 西工大 题解:
P1716 西北工业大学机试题
发布于2025年3月3日 07:28
阅读数 89

#include <bits/stdc++.h>
using namespace std;

const int N = 100005;
int a[N];

void quickSort(int l, int r) {
	if(l >= r) return;
	int x = a[l], i = l, j = r; // 定义基准元素和双指针
	while(i < j) {
		while(i < j && a[j] > x) { // 先从右往左找第一个小于等于x的元素,不符合要求的跳过
			j --; 
		}
		if(i < j) a[i ++] = a[j]; // 若找到,替换到位置i(左边)指针右移
		while(i < j && a[i] < x) { // 从左往右找第一个大于等于x的元素,不符合要求的跳过
			i ++;
		}
		if(i < j) a[j --] = a[i]; // 若找到,替换到位置j(右边)指针左移
	}
	a[i] = x; // i=j时,基准元素在中间
	quickSort(l, i - 1);
	quickSort(i + 1, r);
}

int main() {
	int n;
	cin >> n;
	for(int i = 0; i < n; i++) cin >> a[i]; 
	quickSort(0 , n - 1);
	for(int i = 0; i < n; i++) cout << a[i] << " ";
	cout << endl; 
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发