structRange { int start, end; Range(int s = 0, int e = 0) { start = s, end = e; } };
template <typename T> voidquick_sort(T arr[], constint len) { if (len <= 0) return; Range r[len]; int p = 0; r[p++] = Range(0, len - 1); while (p) { Range range = r[--p]; if (range.start >= range.end) continue; T mid = arr[range.end]; int left = range.start, right = range.end - 1; while (left < right) { while (arr[left] < mid && left < right) left++; while (arr[right] >= mid && left < right) right--; std::swap(arr[left], arr[right]); } if (arr[left] >= arr[range.end]) std::swap(arr[left], arr[range.end]); else left++; r[p++] = Range(range.start, left - 1); r[p++] = Range(left + 1, range.end); } }
voidquick_sort(int bg, int ed) { if (bg >= ed) return; int l = bg, r = ed - 1, pivot = arr[ed]; while (l < r) { while (arr[l] < pivot && l < r) ++l; while (arr[r] >= pivot && l < r) --r; swap(arr[l], arr[r]); } if (arr[l] >= arr[ed]) swap(arr[l], arr[ed]); else ++l; quick_sort(bg, l - 1); quick_sort(l + 1, ed); }
intmain() { cin >> N; for (int i = 0; i < N; ++i) cin >> arr[i]; quick_sort(0, N - 1); for (int i = 0; i < N; ++i) cout << arr[i] << " "; return0; }