problemscpp
A collection of my answers to algorithm problems in c++.
函数
pat::b::b1035 命名空间参考

1035 插入与归并 更多...

函数

int main (istream &cin, ostream &cout)
 
 TEST (b1035, case1)
 
 TEST (b1035, case2)
 

详细描述

1035 插入与归并

函数说明

◆ main()

int pat::b::b1035::main ( istream &  cin,
ostream &  cout 
)

在文件 pat.cpp1119 行定义.

1119 {
1120 int n;
1121 cin >> n;
1122 vector<int> vec1(n);
1123 vector<int> vec2(n);
1124 for(int i = 0; i < n; i++) {
1125 cin >> vec1[i];
1126 }
1127 for(int i = 0; i < n; i++) {
1128 cin >> vec2[i];
1129 }
1130 int i = n - 1;
1131 for(; i >= 0 && vec1[i] == vec2[i]; --i) {}
1132 vector<int> sorted_vec = vec1;
1133 sort(sorted_vec.begin(), sorted_vec.begin() + i + 1);
1134 bool insertion = true;
1135 for(int j = 0; j <= i; j++) {
1136 if(sorted_vec[j] != vec2[j]) {
1137 insertion = false;
1138 break;
1139 }
1140 }
1141 if(insertion) {
1142 //插入排序
1143 cout << "Insertion Sort" << endl;
1144 int j = n - 1;
1145 for(; j >= 0; --j) {
1146 vector vec1_cpy = vec1;
1147 sort(vec1_cpy.begin(), vec1_cpy.begin() + j);
1148 if(vec1_cpy == vec2) {
1149 break;
1150 }
1151 }
1152 sort(vec1.begin(), vec1.begin() + j + 1);
1153 for(int k = 0; k < n; k++) {
1154 cout << vec1[k];
1155 if(k != n - 1) {
1156 cout << ' ';
1157 }
1158 }
1159 return 0;
1160 }
1161 //归并排序
1162 cout << "Merge Sort" << endl;
1163 int factor = 1;
1164 bool flag = false;
1165 while(true) {
1166 factor *= 2;
1167 int j = 0;
1168 for(; (j + 1) * factor <= n; j++) {
1169 sort(vec1.begin() + j * factor, vec1.begin() + (j + 1) * factor);
1170 }
1171 if(j * factor < n) {
1172 sort(vec1.begin() + j * factor, vec1.end());
1173 }
1174 if(flag) {
1175 for(int k = 0; k < n; k++) {
1176 cout << vec1[k];
1177 if(k != n - 1) {
1178 cout << ' ';
1179 }
1180 }
1181 return 0;
1182 }
1183 if(vec1 == vec2) {
1184 flag = true;
1185 }
1186 }
1187 }

被这些函数引用 TEST().

◆ TEST() [1/2]

pat::b::b1035::TEST ( b1035  ,
case1   
)

在文件 pat_test.cpp526 行定义.

526 {
527 istringstream in("10\n"
528 "3 1 2 8 7 5 9 4 6 0\n"
529 "1 2 3 7 8 5 9 4 6 0");
530 auto out = ostringstream();
531 main(in, out);
532 const auto ans = out.str();
533 ASSERT_EQ("Insertion Sort\n"
534 "1 2 3 5 7 8 9 4 6 0",
535 out.str());
536 }
int main(int argc, char **argv)
Definition: main.cpp:5

引用了 main().

◆ TEST() [2/2]

pat::b::b1035::TEST ( b1035  ,
case2   
)

在文件 pat_test.cpp538 行定义.

538 {
539 istringstream in("10\n"
540 "3 1 2 8 7 5 9 4 0 6\n"
541 "1 3 2 8 5 7 4 9 0 6");
542 auto out = ostringstream();
543 main(in, out);
544 const auto ans = out.str();
545 ASSERT_EQ("Merge Sort\n"
546 "1 2 3 8 4 5 7 9 0 6",
547 out.str());
548 }

引用了 main().