Bladeren bron

上传文件至 ''

webturing 5 jaren geleden
bovenliggende
commit
275eb2d356
4 gewijzigde bestanden met toevoegingen van 111 en 0 verwijderingen
  1. 15 0
      DEFG.cpp
  2. 34 0
      E.cpp
  3. 21 0
      F.cpp
  4. 41 0
      G.cpp

+ 15 - 0
DEFG.cpp

@@ -0,0 +1,15 @@
+#include<bits/stdc++.h>
+
+using namespace std;
+
+int main() {
+    int n;
+    cin >> n;
+    vector<int> v(n);
+    for (auto &e:v)cin >> e;
+    sort(v.begin(), v.end());
+    for (auto e:v)cout << e << " ";
+    cout << endl;
+    return 0;
+
+}

+ 34 - 0
E.cpp

@@ -0,0 +1,34 @@
+#include<bits/stdc++.h>
+
+using namespace std;
+
+int pp(vector<int> &a, int p, int q) {
+    int x = a[q];
+    int i = p - 1;
+    for (int j = p; j <= q - 1; j++) {
+        if (a[j] <= x) {
+            i++;
+            swap(a[i], a[j]);
+        }
+    }
+    swap(a[i + 1], a[q]);
+    return i + 1;
+}
+
+void quick_sort(vector<int> &a, int p, int q) {
+    if (p >= q)return;
+    int r = pp(a, p, q);
+    quick_sort(a, p, r - 1);
+    quick_sort(a, r + 1, q);
+}
+
+int main() {
+    int n;
+    cin >> n;
+    vector<int> a(n);
+    for (auto &e:a)cin >> e;
+    quick_sort(a, 0, n - 1);
+    for (auto e:a)cout << e << " ";
+    cout << endl;
+    return 0;
+}

+ 21 - 0
F.cpp

@@ -0,0 +1,21 @@
+#include<bits/stdc++.h>
+
+using namespace std;
+
+int main() {
+    int n;
+    cin >> n;
+    vector<int> a(n);
+    for (auto &e:a)cin >> e;
+    for (int i = 0; i < n - 1; i++) {
+        auto k = min_element(a.begin() + i, a.end());
+        swap(a[i], *k);
+    }
+
+    cout << a[0];
+    for (int i = 1; i < a.size(); i++)
+        cout << " " << a[i];
+    cout << endl;
+    return 0;
+
+}

+ 41 - 0
G.cpp

@@ -0,0 +1,41 @@
+#include<bits/stdc++.h>
+
+using namespace std;
+
+void merge_two(vector<int> &v, int p, int mid, int q) {
+    vector<int> left(v.begin() + p, v.begin() + mid + 1);
+    vector<int> right(v.begin() + mid + 1, v.begin() + q + 1);
+    left.push_back(INT_MAX);
+    right.push_back(INT_MAX);
+    int ll = 0, rr = 0;
+    for (int i = p; i <= q; i++) {
+        if (left[ll] <= right[rr]) {
+            v[i] = left[ll++];
+        } else {
+            v[i] = right[rr++];
+        }
+    }
+}
+
+void merge_sort(vector<int> &a, int p, int q) {
+    if (p >= q)return;
+    int mid = (p + q) >> 1;
+    merge_sort(a, p, mid);
+    merge_sort(a, mid + 1, q);
+    merge_two(a, p, mid, q);
+}
+
+int main() {
+    int n;
+    cin >> n;
+    vector<int> a(n);
+    for (auto &e:a)cin >> e;
+    merge_sort(a, 0, n - 1);
+
+    cout << a[0];
+    for (int i = 1; i < a.size(); i++)
+        cout << " " << a[i];
+    cout << endl;
+    return 0;
+
+}