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

Сортировка массива - C++

Восстановить пароль Регистрация
 
Toda
10 / 10 / 0
Регистрация: 16.11.2012
Сообщений: 320
16.05.2013, 21:48     Сортировка массива #1
Здравствуйте! Вот имею такую задачу: Дано 2 массива a[i] b[i], написать программу, которая изменяет данные массивы, в соответствии с правилом: наибольшие элементы с массива a[i] b[i] принимаются в качестве нового значения a[i], а меньшие - в b[i]. Прошу помощи.
Вот то, что смог реализовать я:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <conio.h>
using namespace std;
 
void main()
    {
        int b[5], a[5], i;
        for (i=0; i<5; i++)
            {
                b[i]= 0 + rand()%10;
                cout<<b[i]<<' ';
            }
        cout<<"\n";
        for (i=0; i<5; i++)
            {
                a[i]=0 + rand()%10;
                cout<<a[i]<<' ';
            }
    
        getch();
    }
Добавлено через 59 минут
UP темы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
16.05.2013, 21:50     Сортировка массива #2
Если правильно понял задачу, то вот:
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int a[5] = { 19,21,3,7 };
    int b[5] = { 74,196,8,64 };
    int x,y;
 
    for(int i=0; i!=4; i++)
    {
        x = a[i];
        y = b[i];
 
        if(b[i]>a[i])
        {
            a[i]=y;
            b[i]=x;
        }
    }
    for(int i=0; i!=4; i++)
        cout<<a[i]<<' ';
 
    cout<<"\nEnd";
    return 0;
}
в а кладем большие значения, а в b меньшие
Toda
10 / 10 / 0
Регистрация: 16.11.2012
Сообщений: 320
16.05.2013, 22:04  [ТС]     Сортировка массива #3
Pakisan, в конце должно выводится 2 массива, А и В, в массиве А - самые большие значения, в массиве В - самые маленькие значения из этих двух начальных массивов

Добавлено через 2 минуты
Pakisan, что значит i!=4 и зачем мы используем в теле цикла
C++
1
2
3
4
5
6
7
8
 x = a[i];
        y = b[i];
 
        if(b[i]>a[i])
        {
            a[i]=y;
            b[i]=x;
        }
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
16.05.2013, 22:20     Сортировка массива #4
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
#include <iostream>
 
using namespace std;
 
int main()
{
        // Тут сам инициализирую массив
    int a[5] = { 2,4,7,10 }; 
    int b[5] = { 22,64,78,1 };
    int x,y;
        // Простая логика
    for(int i=0; i!=4; i++)
    {
        x = a[i];
        y = b[i];
               
        if(b[i]>a[i])
        {
            a[i]=y;
            b[i]=x;
        }
    }
        // Выводим наибольшие
    for(int i=0; i!=4; i++)
        cout<<a[i]<<' ';
    cout<<'\n';
        // Выводим наименьшие
    for(int i=0; i!=4; i++)
            cout<<b[i]<<' ';
 
    cout<<"\nEnd";
    return 0;
}
Готово, всего то вывести второй массив.

Что касается цикла, то там мы сохраняем по числу из a и b и сверяем их, если a[i]<b[i], значит меняем их местами. Таким образом реализуем простую сортировку
Toda
10 / 10 / 0
Регистрация: 16.11.2012
Сообщений: 320
16.05.2013, 22:38  [ТС]     Сортировка массива #5
Pakisan, нечто непонятное в программе происходит
Миниатюры
Сортировка массива   Сортировка массива  
Toda
10 / 10 / 0
Регистрация: 16.11.2012
Сообщений: 320
16.05.2013, 22:42  [ТС]     Сортировка массива #6
Pakisan, вот пытаюсь понять разницу между Вашей первой и второй программой, в частности:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
 for(int i=0; i!=4; i++)
    {
        x = a[i];
        y = b[i];
 
        if(b[i]>a[i])
        {
            a[i]=y;
            b[i]=x;
        }
    }
    for(int i=0; i!=4; i++)
        cout<<a[i]<<' ';
и
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  for(int i=0; i!=4; i++)
    {
        x = a[i];
        y = b[i];
               
        if(b[i]>a[i])
        {
            a[i]=y;
            b[i]=x;
        }
    }
        // Выводим наибольшие
    for(int i=0; i!=4; i++)
        cout<<a[i]<<' ';
    cout<<'\n';
        // Выводим наименьшие
    for(int i=0; i!=4; i++)
            cout<<b[i]<<' ';
Только в первом случае выводит 2 наибольших и 2 наименьших значения, а во втором случае у Вас выводит 2 разных массива, которые отсортированы, хотя строчки кода:
C++
1
2
for(int i=0; i!=4; i++)
        cout<<a[i]<<' ';
одинаковы
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
16.05.2013, 22:49     Сортировка массива #7
Эм, что именно тебя смущает? Как я понимаю ты прогнал через программку 2 массива, и на выходе получил отсортированный массив A и B.

UPD: Приведенный выше код одинаков, это да, логика не изменилась. Но во втором случае я вывожу отсортированный массивы в кол-ве 2х штук, заместо одного(в первом случае)

Добавлено через 6 минут
UPD2: Алгоритм дает поверхностную сортировку, сортирует сравнивая два конкретных числа, не опираясь на весь массив, посему сортировка может быть дурацкой(с конечной точки зрения).
Toda
10 / 10 / 0
Регистрация: 16.11.2012
Сообщений: 320
16.05.2013, 23:03  [ТС]     Сортировка массива #8
Pakisan, 1) как у Вас в первом случае получилось вывести первые 2 элемента - максимальными, а вторые 2 - минимальные, а во втором случае, другой эффект. Ведь эта строчка -
C++
1
2
for(int i=0; i!=4; i++)
        cout<<a[i]<<' ';
встречается в двух программах, а работает по разному;
2) Посмотрите на игру цифр на моих скринах - на первом скрине обьявления переменных идет в таком порядке: 2, 4, 7, 10 и 22, 64, 78, 1. Как результат - у нас не правильно он отсортирован - 22, 68, 74, 10 и 2, 4, 7, 1. Это ведь не правильно, Вы же понимаете? И на втором скрине вроде бы нормально выводится
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
16.05.2013, 23:09     Сортировка массива #9
оке, я не прав. Насколько я понимаю вы хотите получить массивы в одном из которых все наибольшие значения, а в другом наименьшие + они отсортированы по возрастанию так?
Toda
10 / 10 / 0
Регистрация: 16.11.2012
Сообщений: 320
16.05.2013, 23:15  [ТС]     Сортировка массива #10
Pakisan, да, на выходе хочу получить 2 массива в которых:
1) 5 наибольших значений - первый массив;
2) 5 наименьших значений - второй массив;
3) Сортировка не является целью как таковой, можно без нее
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
16.05.2013, 23:29     Сортировка массива #11
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
#include <iostream>
 
using namespace std;
// Приводим к виду: от меньшего к большему
void sort(int *m)
{
    int x,y;
    x=0;
    for(int i=0; i+1!=4;i++)
    {
        for(int i=0; i+1!=4;i++)
        {
            x=m[i];
            y=m[i+1];
            if(m[i]>m[i+1])
            {
                m[i]=y;
                m[i+1]=x;
            }
        }
    }
}
// Сама сортировка
void sort_m(int *m, int *m2)
{
    int x,y;
    x=y=0;
 
    for(int i=0; i!=4; i++)
    {
        x=m[i];
        y=m2[i];
        if(m[i]<m2[i])
        {
            m[i]=y;
            m2[i]=x;
        }
 
    }
 
}
 
int main()
{
    int a[5] = { 2,4,7,1 };
    int b[5] = { 78,64,22,10 };
 
    sort(a);
    sort(b);
    sort_m(a,b);
 
    for(int i=0; i!=4; i++)
            cout<<a[i]<<' ';
    cout<<'\n';
    for(int i=0; i!=4; i++)
            cout<<b[i]<<' ';
    cout<<"\nEnd";
    return 0;
}
Надеюсь теперь то)
Toda
10 / 10 / 0
Регистрация: 16.11.2012
Сообщений: 320
18.05.2013, 13:55  [ТС]     Сортировка массива #12
Pakisan, чет я вообще не могу понять как она работает, сперва нужно ввести что-то, а потом - она резко закрывается
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2013, 16:25     Сортировка массива
Еще ссылки по теме:

C++ Сортировка массива, вместо массива выводит мусор
Сортировка массива структур через сортировку массива указателей C++
Сортировка массива. Ошибка после ввода размерности массива C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
18.05.2013, 16:25     Сортировка массива #13
в смысле? перед return 0; напиши system("pause");
Вводить ничего не нужно
Yandex
Объявления
18.05.2013, 16:25     Сортировка массива
Ответ Создать тему
Опции темы

Текущее время: 02:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru