提交时间:2025-05-27 15:28:21
运行 ID: 193916
#include <iostream> #include <vector> #include <cstdlib> #include <ctime> using namespace std; struct Pair { int a, b; }; // 比较函数:先按a升序,若相同则按b升序 bool compare(const Pair& p1, const Pair& p2) { if (p1.a != p2.a) return p1.a < p2.a; return p1.b < p2.b; } // 三路快速排序 void quickSort(vector<Pair>& arr, int left, int right) { if (left >= right) return; // 随机选择基准元素 int pivotIndex = left + rand() % (right - left + 1); swap(arr[pivotIndex], arr[right]); const Pair& pivot = arr[right]; int lt = left; // 小于基准的区域右端点 int gt = right; // 大于基准的区域左端点 int i = left; // 当前扫描位置 while (i <= gt) { if (compare(arr[i], pivot)) { swap(arr[lt], arr[i]); lt++; i++; } else if (compare(pivot, arr[i])) { swap(arr[i], arr[gt]); gt--; } else { // 相等的情况 i++; } } // 递归处理小于和大于基准的部分 quickSort(arr, left, lt - 1); quickSort(arr, gt + 1, right); } int main() { srand(time(0)); // 初始化随机数种子 int n; cin >> n; vector<Pair> pairs(n); for (int i = 0; i < n; ++i) { cin >> pairs[i].a >> pairs[i].b; } quickSort(pairs, 0, n - 1); for (const auto& p : pairs) { cout << p.a << " " << p.b << endl; } return 0; }