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 }
默默地一点点变强,细节决定成败