PTA 乙级 1035 插入与归并 (25分) C++

插入排序:https://blog.csdn.net/qq_42453117/article/details/99680831

归并排序:https://blog.csdn.net/qq_42453117/article/details/100036347

测试点0、2、4:插入排序

测试点1、3、5、6:归并排序

C++

 1 #include<iostream>
 2 #include<vector>
 3 #include<algorithm>
 4 
 5 using namespace std;
 6 
 7 // 插入排序
 8 int insertionsort(vector<int> a, vector<int> b, int n) {
 9     int flag = 0;
10     for (int i = 1; i < n; i++) {            // 从arr[0]后的元素开始
11         int value = a[i];                    // 定义待插入的数
12         int index = i;                        // 找到待插入数的下标
13         while (index > 0 && value < a[index - 1]) {    // 元素右移
14             a[index] = a[index - 1];
15             index--;
16         }
17         a[index] = value;        // 找到传入元素所在位置赋值
18         if (flag) {                // 输出该排序算法再迭代一轮的序列
19             cout << "Insertion Sort" << endl;
20             cout << a[0];
21             for (int j = 1; j < n; j++)cout << " " << a[j];
22             return 1;
23         }
24         if (equal(a.begin(), a.end(), b.begin()))    // 与第二行数据进行比较
25             flag = 1;
26     }
27     return 0;
28 }
29 
30 // 归并排序
31 void mergesort(vector<int> a, vector<int> b,int n) {   
32     int k = 1;                    // 分割大小
33     int flag = 0;
34     while (k <= n ) {            // 当分割的大小小于数组大小时
35         for (int i = 0; i < n; i += k) {
36             sort(a.begin() + i, a.begin() + (i + k < n ? i + k : n));    // 将分割的数组进行排序
37         }
38         k *= 2;                    //分割大小以二倍增大
39         if (flag) {
40             cout << "Merge Sort" << endl;
41             cout << a[0];
42             for (int j = 1; j < n; j++)cout << " " << a[j];
43             return;
44         }
45         if (equal(a.begin(), a.end(), b.begin()))
46             flag = 1;
47     }
48 }
49 
50 int main() {
51     int n = 0;
52     cin >> n;
53     vector<int> arr(n);
54     vector<int> asort(n);
55     for (int i = 0; i < n; i++) cin >> arr[i];
56     for (int i = 0; i < n; i++) cin >> asort[i];
57     if (insertionsort(arr, asort, n)) exit(0);        //是插入排序直接退出
58     mergesort(arr, asort, n);
59     return 0;
60 }

原文地址:https://www.cnblogs.com/SCP-514/p/13374709.html