Форум программистов, компьютерный форум CyberForum.ru

Сортировка 2-х одномерных массивов в 1 упорядоченный массив по возрастанию - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Полиморфизм и вируальные функции http://www.cyberforum.ru/cpp-beginners/thread901043.html
Создайте простую иерархию геометричесих фигур, состоящую из базового класса Shape, и производных классов Circle, Bar и Triangle. Включите в базовый класс виртуальную функцию show() и переопределите ее в производных классах. Создайте массив указателей на объекты, созданные в куче, и вызовите show() через указатели базового класса, чтобы проверить поведение виртуальных функций. Объясните результат...
C++ Работа со структурой И так я написал одну из очередных программ для лабораторных работ, но опять возникла проблема. Сам код: #include "stdafx.h" #include "iostream" const int arraySize = 1; using namespace std; int _tmain(int argc, _TCHAR* argv) { setlocale(0,"Rus"); http://www.cyberforum.ru/cpp-beginners/thread901030.html
C++ Поиск точек, наиболее удаленных от начала координат
Написать программу находящую номер точки, наиболее удаленную от начала координат. Координаты точек загрузить из бинарного файла, имя которого передается аргументом командной строки. Результатом работы программы должен быть вывод значений номера точки в последовательности данных в файле, ее координат и расстояния до начала координат. Исходный файл должен содержать значения координат не менее чем...
C++ ООП пример
Доброго времени суток. Тут отыскался один пример в конспекте. Записал на лекции спустя рукава. Хочу восстановить. Где-то что-то пропустил... #include <vcl.h> #include <conio.h> #include <iostream.h> class CClass //объявили класс { double a; int b; // целочисленный массив из пяти значений
C++ деки C++ http://www.cyberforum.ru/cpp-beginners/thread901011.html
объясните пожалуйста работу программы, желательно каждую строку... Работа по декам.. #include "stack.h" #include "iostream" bool Dek::isEmpty() { return (Top==NULL); }
C++ Двумерные массивы. Определить максимальный по модулю элемент в каждом столбце матрицы. 2. Добавить К столбцов в начало матрицы Всем доброго времени суток. Нужно: 1. Определить максимальный по модулю элемент в каждом столбце матрицы. 2. Добавить К столбцов в начало матрицы. Как это можно реализовать? С одномерными массивами легко получалось, а тут траблы. подробнее

Показать сообщение отдельно
sedoi_starik
1 / 1 / 0
Регистрация: 13.06.2013
Сообщений: 41

Сортировка 2-х одномерных массивов в 1 упорядоченный массив по возрастанию - C++

13.06.2013, 20:09. Просмотров 2419. Ответов 13
Метки (Все метки)

Задача такая, на форуме где то была уже. Но суть совсем другая.
Есть два упорядоченных массива одномерных массива А(N) и B(M). Соединить эти массивы в один С(N+M) упорядоченный массив. Массивы А и В могут быть упорядоченны в любой последовательности. Массив А (либо по возрастанию или по убыванию), точно так же и насчет массива В. А могу быть и упорядочены в одной последовательности.

Вот код который работает если оба массивы упорядочены по возрастанию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// test1.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main()
{
    // Считываем размеры массивов,
    // который необходимо слить в
    // один отсортированный массив
    int n, m;
    cin >> n >> m;
 
    // Динамически выделяем память под
    // хранение массивов размера n и m
    int *a = new int[n];
    int *b = new int[m];
   
    // Считываем массивы;
    // По условию алгоритма они уже
    // должны быть отсортированы
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
 
    for (int i = 0; i < m; i++)
    {
        cin >> b[i];
    }
 
    // Динамически выделяем память под
    // хранение массива, полученного
    // слиянием двух исходных, его
    // размер, очевидно, равен n + m
    int *result = new int[n + m];
 
    // Заведем два индекса, указывающих
    // на первый необработанный элемент
    // первого и второго массивов
    int i = 0, j = 0;
 
    // И заведем индекс массива-результата,
    // который указывает позицию, которая
    // будет заполнена на текущем шаге
    int index = 0;
 
    // Будем повторять сравнение элементов
    // массивов a и b до тех пор, пока
    // в каждом из них есть хотя бы один
    // необработанный элемент
    while (i < n && j < m)
    {
        // В соответствии с тем, текущий элемент
        // какого массива меньше, мы записываем
        // этот элемент в массив-результат и
        // обновляем нужный индекс (i или j)
        if (a[i] < b[j])
        {
            result[index] = a[i];
            i++;
            
        }
        else
        {
            result[index] = b[j];
            j++;
            
        }
 
        index++;
    }
 
    // После выполнения предыдущего цикла
    // все элементы одного из массивов будут
    // обработаны, тогда оставшиеся элементы
    // другого массива нужно просто дописать
    // в массив-результат
    
    // Заметим, что одно из условий (i < n)
    // или (j < m) будет гарантированно ложно
    while (i < n)
    {
        result[index] = a[i];
        index++;
        i++;
    }
 
    while (j < m)
    {
        result[index] = b[j];
        index++;
        j++;
    }
 
    // Выводим отсортированный массив
    for (int k = 0; k < n + m; k++)
    {
        cout << result[k] << ' ';
    }
system("PAUSE");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru