Форум программистов, компьютерный форум 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. Добавить К столбцов в начало матрицы. Как это можно реализовать? С одномерными массивами легко получалось, а тут траблы. подробнее

Показать сообщение отдельно
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
13.06.2013, 21:19     Сортировка 2-х одномерных массивов в 1 упорядоченный массив по возрастанию
не знаю конечно, но надеюсь понятно
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
#include <iostream>
#include <algorithm>
using namespace std;
 
//функция переворачивает массив
void _reverse(int *first, int *last)
{
    while (first != last && first != --last ) {
        swap(*first, *last);
        ++first;
    }
}
 
//проверяет отсортирован ли массив по возрастанию
bool SortedASC(int *first, int *last)
{
    --last;
    while (first != last) {
        if ( *first > *(first + 1)) return false;
        ++first;
    }
    return true;
}
int main()
{
    const int a_arr_size = 10; //размер массива А
    const int b_arr_size = 5; //размер массива В
    
    int a_arr[a_arr_size] = {2,5,7,8,55,88,123,353,911,923};
    int b_arr[b_arr_size] = {600,50,30,20,10};
    //int b_arr[b_arr_size] = {11,14,15,32,6688};
    //int a_arr[10] = {188,133,122,111,100,99,88,77,66,55};
    
    int c_arr_size = a_arr_size + b_arr_size;
    int *c_arr = new int[c_arr_size]; //результирующий массив
 
    bool SortedASC_A = SortedASC(a_arr, a_arr + a_arr_size);
    bool SortedASC_B = SortedASC(b_arr, b_arr + b_arr_size);
 
    if ( SortedASC_A && !SortedASC_B) //если А упорядочен по возрастанию, а В - нет
        _reverse( b_arr, b_arr + b_arr_size ); //разворачиваем В
    else if (!SortedASC_A && SortedASC_B) //если В упорядочен по возрастанию, а А - нет
        _reverse( a_arr, a_arr + a_arr_size ); //разворачиваем А
    else if (!SortedASC_A && !SortedASC_B) { //если и А и В упорядочены по убыванию, то разворачиваем оба
        _reverse( a_arr, a_arr + a_arr_size );
        _reverse( b_arr, b_arr + b_arr_size );
    }
 
    int i = 0, j = 0, k = 0;
 
    //начинаем процесс слияния
    //цикл работает пока в массивах А и В есть хотя бы один не распределенный элемент
    while (i < a_arr_size && j < b_arr_size)
        if ( a_arr[i] > b_arr[j] ) {
            c_arr[k] = b_arr[j];
            ++j;
            ++k;
        } else {
            c_arr[k] = a_arr[i];
            ++i;
            ++k;
        }
    //когда один из массивов (мы не знаем какой) полностью распрделен в результирующий массив
    //то подтягиваем остальные элементы
    for (; i != a_arr_size; ++i, ++k) c_arr[k] = a_arr[i];
    for (; j != b_arr_size; ++j, ++k) c_arr[k] = b_arr[j];
 
    for (int l = 0; l != c_arr_size; ++l) cout << c_arr[l] << ", ";
 
    delete[] c_arr;
    return 0;
}
 
Текущее время: 19:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru