voidquicksort(int q[], int l, int r) { //如果为1个数则直接返回 if (l >= r) return; // 定义基准数,i,j双指针 int x = q[(l + r) / 2], i = l - 1, j = r + 1; // 如果两个指针还没有相遇就循环 while (i < j) { // i往后走,找到一个比x大的数 do i++; while (q[i] < x); // j往前走,找到一个比x小的数 do j--; while (q[j] > x); // 如果此时i<j,则交换这两个数 if (i < j) swap(q[i], q[j]); } //递归处理左右两边区间的数 quicksort(q, l, j); quicksort(q, j + 1, r); //直到数组里只剩下一个数就结束递归 // 此时所有小于x的数在左边区间,大于x的数在右边区间 }
voidsolve() { cin >> n; for (int i = 0; i < n; i++) { cin >> q[i]; } quicksort(q, 0, n - 1); for (int i = 0; i < n; i++) { cout << q[i] << " "; } }
intmain() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); int T = 1; while (T--) { solve(); } return0; }