• 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 }

  • 相关阅读:
    第一阶段意见评论
    软件工程--第十一周学习进度
    第一阶段SCRUM冲刺 10
    冲刺(三)
    冲刺(二)
    冲刺(一)
    梦断代码阅读笔记01
    第八周总结
    NABCD项目分析
    第七周总结
  • 原文地址:https://www.cnblogs.com/SCP-514/p/13374709.html
Copyright © 2020-2023  润新知