Итак, если 1-й и 2-й массивы имеют элементы, которые не уменьшают порядок, как я могу сделать третий в том же не убывающем порядке? Вот мой код, но я не знаю, где именно я ошибаюсь:
int main() {
int a[10], b[10];
int m, n, i, j;
cout << " Vavedete maks. broi el. za masiv 1: "; cin >> m;
cout << " Vavedete maks. broi el. za masiv 2: "; cin >> n;
cout << endl;
for (i = 0; i < m; i++) {
cout << " Vavedete " << i << " element za masiv 1: "; cin >> a[i];
} cout << endl << endl;
for (j = 0; j < n; j++) {
cout << " Vavedete " << j << " element za masiv 2: "; cin >> b[j];
}
int c[20];
int k;
i = 0;
j = 0;
for (k = 0; k < (m + n); k++) {
if (a[i]>b[j]) {
c[k] = b[j];
j++;
}
else {
c[k] = a[i];
i++;
}
}
cout << " Noviyat masiv e: ";
for (k = 0; k < (m + n); k++) {
cout << c[k] << " ";
} cout << endl;
system("pause");
}
for (k = 0; k < (m + n); k++) {
if (a[i]>b[j]) {
c[k] = b[j];
j++;
}
else {
c[k] = a[i];
i++;
}
}
Вы объединяете массивы, сравнивая текущие значения и вставляя меньшее значение в c
. Но в итоге вы доберетесь до точки, где j >= n
или i >= m
, что означает, что вы ввели все значения массивов a
или b
в c
. Если j >= n
то сравнение a[i] > b[j]
не определено, так как j
вне пределов.
Измените условие цикла на i < m && j < n
. Затем ваш цикл выйдет, как только один из массивов будет полностью вставлен в c
. На этом этапе вы можете вставить остальную часть другого массива:
for(; i < m; i++){
c[k] = a[i];
k++;
}
for (; j < n; j++){
c[k] = b[j];
k++;
}
Обратите внимание, что только одна из этих циклов будет выполняться.
std::vector
. Иstd::sort()
.