diff --git "a/ZJU_MOOC_\346\225\260\346\215\256\347\273\223\346\236\204/09-\346\216\222\345\272\2172 Insert or Merge (25 \345\210\206).cpp" "b/ZJU_MOOC_\346\225\260\346\215\256\347\273\223\346\236\204/09-\346\216\222\345\272\2172 Insert or Merge (25 \345\210\206).cpp" new file mode 100644 index 0000000..1d8502f --- /dev/null +++ "b/ZJU_MOOC_\346\225\260\346\215\256\347\273\223\346\236\204/09-\346\216\222\345\272\2172 Insert or Merge (25 \345\210\206).cpp" @@ -0,0 +1,41 @@ +#include +#include +using namespace std; +int main() { + int n; + cin >> n; + int *a = new int [n]; + int *b = new int [n]; + for (int i = 0; i < n; i++) + cin >> a[i]; + for (int i = 0; i < n; i++) + cin >> b[i]; + int i, j; + for (i = 0; i < n - 1 && b[i] <= b[i + 1]; i++); + for (j = i + 1; a[j] == b[j] && j < n; j++); + if (j == n) { + cout << "Insertion Sort" << endl; + sort(a, a + i + 2); + } else { + cout << "Merge Sort" << endl; + int k = 1, flag = 1; + while(flag) { + flag = 0; + for (i = 0; i < n; i++) { + if (a[i] != b[i]) + flag = 1; + } + k = k * 2; + for (i = 0; i < n / k; i++) + sort(a + i * k, a + (i + 1) * k); + sort(a + n / k * k, a + n); + } + } + for (j = 0; j < n; j++) { + if (j != 0) printf(" "); + printf("%d", a[j]); + } + delete [] a; + delete [] b; + return 0; +}