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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Полиморфизм и вируальные функции http://www.cyberforum.ru/cpp-beginners/thread901043.html
Создайте простую иерархию геометричесих фигур, состоящую из базового класса Shape, и производных классов Circle, Bar и Triangle. Включите в базовый класс виртуальную функцию show() и переопределите...
C++ Работа со структурой И так я написал одну из очередных программ для лабораторных работ, но опять возникла проблема. Сам код: #include "stdafx.h" #include "iostream" const int arraySize = 1; using namespace std;... http://www.cyberforum.ru/cpp-beginners/thread901030.html
C++ Поиск точек, наиболее удаленных от начала координат
Написать программу находящую номер точки, наиболее удаленную от начала координат. Координаты точек загрузить из бинарного файла, имя которого передается аргументом командной строки. Результатом...
C++ ООП пример
Доброго времени суток. Тут отыскался один пример в конспекте. Записал на лекции спустя рукава. Хочу восстановить. Где-то что-то пропустил... #include <vcl.h> #include <conio.h> #include...
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. Просмотров 2728. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru