Есть два одномерных массива. Массив A размером 8 элементов. Массив B
размером 3 элемента. В массиве A заполнено 5 первых ячеек. В ячейках
записаны целые числа, отсортированные по возрастанию. В массиве B
размером 3 элемента заполнены все 3 ячейки. В ячейках тоже целые
числа, отсортированные по возрастанию. Например: A [0, 1, 2, 30, 50,
null, null, null]; B [2, 5, 23] Задача: написать на любом языке
программирования или псевдоязыке алгоритм, который отсортирует по
возрастанию все имеющиеся 8 чисел в двух массивах (5 чисел в массиве A
+ 3 числа в массиве B) и запишет результат массив A. Желательно, чтобы
проход по каждому массиву выполнялся только один раз.
Другие языки программирования и технологии
Задачка на сортировку массивов
d не знаю. могу словами.
берем два хвоста х-а=5 и х-б=3 и индекс и=8
сравниваем а [х-а] и б [х-б]
если а [х-а] > б [х-б] то а [и] =а [х-а]; х-а = х-а - 1
иначе а [и] =б [х-б]; х-б = х-б - 1
и=и-1
повторяем, пока один из хвостов не равен 0
берем два хвоста х-а=5 и х-б=3 и индекс и=8
сравниваем а [х-а] и б [х-б]
если а [х-а] > б [х-б] то а [и] =а [х-а]; х-а = х-а - 1
иначе а [и] =б [х-б]; х-б = х-б - 1
и=и-1
повторяем, пока один из хвостов не равен 0
Алексей Ратников
у тебя вроде это и написано. хоть d и не знаю, но буквы знакомые :)
Евгений Неонегин
Достаточно проверять на 0 хвост малого массива х-б.
На C++ подойдёт?
#include <iostream>
#define null INT_MAX
using namespace std;
size_t insert(int, int*, size_t, size_t);
void print(int*, size_t);
int main() {
const size_t size_8 = 8, size_3 = 3;
int a[size_8] = { 0, 1, 2, 30, 50, null, null, null };
int b[size_3] = { 2, 5, 23 };
print(a, size_8);
print(b, size_3);
for (size_t i = 0; i < size_3; ++i) insert(b[i], a, size_8, i);
print(a, size_8);
cin.get();
}
size_t insert(int src, int* dest, size_t size, size_t index) {
size_t i = index;
while (dest[i] < src) if (++i == size) break;
if (i != size) {
for (size_t last = size - 1; last > i; --last) dest[last] = dest[last - 1];
dest[i] = src;
}
return i;
}
void print(int* arr, size_t size) {
for (size_t i = 0; i < size; ++i) {
if (arr[i] != null) cout << arr[i];
else cout << "null";
if (i < size - 1) cout << ", ";
else cout << endl;
}
}
#include <iostream>
#define null INT_MAX
using namespace std;
size_t insert(int, int*, size_t, size_t);
void print(int*, size_t);
int main() {
const size_t size_8 = 8, size_3 = 3;
int a[size_8] = { 0, 1, 2, 30, 50, null, null, null };
int b[size_3] = { 2, 5, 23 };
print(a, size_8);
print(b, size_3);
for (size_t i = 0; i < size_3; ++i) insert(b[i], a, size_8, i);
print(a, size_8);
cin.get();
}
size_t insert(int src, int* dest, size_t size, size_t index) {
size_t i = index;
while (dest[i] < src) if (++i == size) break;
if (i != size) {
for (size_t last = size - 1; last > i; --last) dest[last] = dest[last - 1];
dest[i] = src;
}
return i;
}
void print(int* arr, size_t size) {
for (size_t i = 0; i < size; ++i) {
if (arr[i] != null) cout << arr[i];
else cout << "null";
if (i < size - 1) cout << ", ";
else cout << endl;
}
}
Евгений Неонегин
Спасибо, шикарно работает. Только чтобы ваш код скомпилировался, надо добавить #include < climits >, в котором объявлена INT_MAX.
Из В пихаешь всё А и сортируешь пузырьковой сортировкой. Примерно так, на синтаксисе паскаля:
err:boolean:=true;
c:integer;
a:=array(1..8) as integer;
b:=array(1..3) as integer;
// ввод элементов
a[6]:=b[1];
a[7]:=b[2];
a[8]:=b[3];
while err=false do begin
for x:=1 to 7 begin
if a[x]<a[x+1] then begin c:=a[x]; a[x]:=a[x+1]; a[x+1]:=c; end else err:=true;
end; end;
err:boolean:=true;
c:integer;
a:=array(1..8) as integer;
b:=array(1..3) as integer;
// ввод элементов
a[6]:=b[1];
a[7]:=b[2];
a[8]:=b[3];
while err=false do begin
for x:=1 to 7 begin
if a[x]<a[x+1] then begin c:=a[x]; a[x]:=a[x+1]; a[x+1]:=c; end else err:=true;
end; end;
Евгений Неонегин
Пузырьковая сортировка не подходит -- просят проходить массивы только один раз.
Похожие вопросы
- Delphi - Сортировка массива и вывод его в стринг грид
- сортировка массива. какой метод сортировки массива самый быстрый и эффективный?
- c#. Сортировка массива в отдельном методе. Консольное приложение.
- Сортировка массива (Паскаль) помогите пожалуйста
- Сортировка массива методом выбора.
- Сортировка массива методом Шелла
- Pascal. Сортировка массива.
- Язык СИ. Массивы Ребят, как на Си написать сортировку массива от меньшего к большему?
- сортировка массива pascal
- Зачем при сортировке массива делать два цикла с for, почему нельзя сделать один цикл?