zoukankan      html  css  js  c++  java
  • 归并排序

    注没有排序那一步,在分解的时候你就把它分解成一个个的,相当于排好了序的,所以直接归并就行了

     1 #include <iostream>
     2 #include <cstring>
     3 using namespace std;
     4 
     5 void merge(int *a, int p, int q, int r) {
     6     int n1 = q - p + 1;
     7     int n2 = r - q;
     8     int *L = new int[n1];
     9     int *R = new int[n2];
    10     for (int i = 0; i < n1; i++)
    11         L[i] = a[p + i];
    12     for (int i = 0; i < n2; i++)
    13         R[i] = a[q + 1 + i];
    14     int key = p;
    15     int i = 0, j = 0;
    16     while (i < n1 || j < n2) {
    17         if (i < n1&&j < n2)
    18             if (L[i] < R[j]) a[key++] = L[i++];
    19             else a[key++] = R[j++];
    20         else
    21             if (i < n1) a[key++] = L[i++];
    22             else a[key++] = R[j++];
    23     }
    24         delete[] L;
    25         delete[] R;
    26         return;
    27     }
    28 
    29 void mergeSort(int *a, int l, int r) {
    30     if (l < r) {
    31         int m = (l + r) / 2;
    32         mergeSort(a, l, m);
    33         mergeSort(a, m + 1, r);
    34         merge(a, l, m, r);
    35     }
    36     return;
    37 }
    38 
    39 
    40 int main() {
    41     int a[100];
    42     int n;
    43     while (cin>>n)
    44     {
    45         for (int i = 0; i < n; i++)
    46             cin >> a[i];
    47 
    48         mergeSort(a, 0, n - 1);
    49 
    50         for (int i = 0; i < n; i++)
    51             cout << a[i] << " ";
    52         cout << endl;
    53     }
    54 }
    自己选的路,跪着也要把它走完------ACM坑
  • 相关阅读:
    第二章 课后习题 6
    第二章 课后习题 5
    第一章 课后习题 10
    第一章 课后习题 7
    JAVA练习1
    作业2
    作业
    c++作业10月13日作业
    c++作业50页例题3.1
    for循环作业4和5
  • 原文地址:https://www.cnblogs.com/IKnowYou0/p/6070352.html
Copyright © 2011-2022 走看看