|
|
- #include <iostream>
- #include <cassert>
-
- using namespace std;
- #define N 1000
- int a[N];
- int *_one_process(int *_begin, int *_end){
- int temp = *_begin;
- int len = _end - _begin;
- int *left = _begin, *right = _end;
- for (int *p = _begin + 1; p <= _end; p++) {
- if (*p <= temp) {
- swap(*left++, *p);
- } else {
- swap(*right--, *p);
- }
- }
- assert(left == right);
- *left = temp;
- return left;
- }
-
- void _fastsort(int *_begin, int *_end) {
- if (_begin >= _end)
- return;
- int *middle = _one_process(_begin, _end);
- _fastsort(_begin, middle - 1);
- _fastsort(middle + 1, _end);
- }
-
- void fast_sort(int *a, int len) {
- _fastsort(a, a + len - 1);
- }
-
- int main()
- {
- int n;
- cin >> n;
- for (int i = 0 ; i < n; i++) cin >> a[i];
- fast_sort(a, n);
- for (int i = 0; i < n; i++) cout << a[i] << " ";
- cout << endl;
- return 0;
- }
|