problemscpp
A collection of my answers to algorithm problems in c++.
静态 Public 成员函数 | 所有成员列表
acwing::acwing818类 参考

AcWing 818. 数组排序 更多...

#include <acwing.h>

静态 Public 成员函数

static int main (istream &cin, ostream &cout)
 
static void sort (int a[], int l, int r)
 

详细描述

AcWing 818. 数组排序

在文件 acwing.h1492 行定义.

成员函数说明

◆ main()

int acwing::acwing818::main ( istream &  cin,
ostream &  cout 
)
static

在文件 acwing.cpp4742 行定义.

4742 {
4743 int n;
4744 int l;
4745 int r;
4746 cin >> n >> l >> r;
4747 auto *a = new int[n];
4748 for(int i = 0; i < n; i++) {
4749 cin >> a[i];
4750 }
4751 sort(a, l, r);
4752 for(int i = 0; i < n; i++) {
4753 cout << a[i] << " ";
4754 }
4755 delete[] a;
4756 return 0;
4757 }
static void sort(int a[], int l, int r)
Definition: acwing.cpp:4759

被这些函数引用 acwing::TEST().

◆ sort()

void acwing::acwing818::sort ( int  a[],
int  l,
int  r 
)
static

在文件 acwing.cpp4759 行定义.

4759 {
4760 if(l == r) {
4761 return;
4762 }
4763 if(l + 1 == r) {
4764 if(a[l] < a[r]) {
4765 return;
4766 }
4767 const int tmp = a[l];
4768 a[l] = a[r];
4769 a[r] = tmp;
4770 }
4771 const int m = a[(l + r) / 2];
4772 deque<int> dq;
4773 int cursor = l;
4774 dq.push_back(m);
4775 for(int i = l; i <= r; i++) {
4776 if(i != (l + r) / 2) {
4777 if(a[i] <= m) {
4778 dq.push_front(a[i]);
4779 cursor++;
4780 } else {
4781 dq.push_back(a[i]);
4782 }
4783 }
4784 }
4785 for(int i = l; i <= r; i++) {
4786 a[i] = dq[i - l];
4787 }
4788 if(l <= cursor - 1) {
4789 sort(a, l, cursor - 1);
4790 }
4791 if(r >= cursor + 1) {
4792 sort(a, cursor + 1, r);
4793 }
4794 }

该类的文档由以下文件生成: