Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
flyant
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 34
1

Сортировка по убыванию методом пузырька

24.04.2016, 20:51. Просмотров 612. Ответов 4
Метки нет (Все метки)

Добрый вечер! Очень нужна помощь. Задание такое: даны два массива. Массив А состоит из N элементов и отсортирован по возрастанию. Массив В состоит из М элементов и отсортирован по убыванию. Разработать программу для слияния этих массивов в отсортированный по убыванию массив С, не содержащий одинаковых элементов.

Решение:
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 <stdlib.h>
#include <stdio.h>
 
int main ()
{
//  ***************************Инициализация данных*********************
    int MAS_one[4]={1,3,5,7};
    int MAS_two[4]={8,6,4,3};
    int MAS_rez[4*2];
    int tmp, i,j;
 //****************************Объединение массивов*********************
    for (int i=0; i<4; i++) 
    { 
        MAS_rez[i]=MAS_one[i];
        MAS_rez[i+4]=MAS_two[i];
    }
 //****************************Сортировка*******************************
for ( i=0; i<4-1; i++)
{
     for ( j=0; j<4-1; i++)
     {
         if (MAS_rez[j]<MAS_rez[j+1])
         {
            tmp=MAS_rez[j];
            MAS_rez[j]=MAS_rez[j+1];
            MAS_rez[j+1]=tmp;
         }
     }
}
   
    for (int i=0; i<4*2; i++)
    printf ("%d", MAS_rez[i]);
}

Проблема: компилируется и выводится просто консоль. Просто черная консоль. И всё. Что делать?
Спасибо большое заранее)

Добавлено через 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
#include <stdlib.h>
#include <stdio.h>
 
int main ()
{
//  ***************************Инициализация данных*********************
    int MAS_one[4]={1,3,5,7};
    int MAS_two[4]={8,6,4,3};
    int MAS_rez[4*2];
    int tmp, i,j;
 //****************************Объединение массивов*********************
    for (int i=0; i<4; i++) 
    { 
        MAS_rez[i]=MAS_one[i];
        MAS_rez[i+4]=MAS_two[i];
    }
    printf ("Massiv objedinen\n");
 //****************************Сортировка*******************************
for ( i=0; i<4-1; i++)
{
    //printf ("Sortirovka proshla\n");
     for ( j=0; j<4-1-i; i++)
     {
        // printf ("Sortirovka proshla\n");
         if (MAS_rez[j]<MAS_rez[j+1])
         {
            tmp=MAS_rez[j];
            MAS_rez[j]=MAS_rez[j+1];
            MAS_rez[j+1]=tmp;
         }
     }
}
   printf ("Sortirovka proshla\n");
    for (i=0; i<4*2; i++)
    printf ("%d", MAS_rez[i]);
}
Добавлено через 14 минут
Вот еще изменила код, получилось. Массив сортируется. Проблем нет. Хотя...Есть...Если в первом и втором массиве будет хотя бы одно одинаковое число, то задача решается неправильно. Как исправить, подскажите, пожалуйста.
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
#include <stdlib.h>
#include <stdio.h>
 
int main ()
{
//  ***************************Инициализация данных*********************
    int MAS_one[4]={1,3,5,7};
    int MAS_two[4]={8,6,4,2};
    int MAS_rez[4*2];
    int tmp, i,j;
 //****************************Объединение массивов*********************
    for (int i=0; i<4; i++) 
    { 
        MAS_rez[i]=MAS_one[i];
        MAS_rez[i+4]=MAS_two[i];
    }
    //printf ("Massiv \n");
 //****************************Сортировка*******************************
    for (i = 0; i<8; i++)
        for (j = 8 - 1; j>i; j--)
            if (MAS_rez[j - 1] <MAS_rez[j])//если текущий элемент меньше следующего, то
            {
                tmp = MAS_rez[j - 1]; //сохранить значение текущего элемента;
                MAS_rez[j - 1] = MAS_rez[j];//заменить текущий элемент следующим;
                MAS_rez[j] = tmp; //заменить следующий элемент текущим.
            }
 
    for (i = 0; i < 8; i++) 
        printf("%d ", MAS_rez[i]); //вывод упорядоченного массива
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2016, 20:51
Ответы с готовыми решениями:

Сортировка по убыванию (методом пузырька)
Задание: добавить сортировку слов по убыванию (по методу пузырька). #include &quot;stdafx.h&quot;...

Сортировка методом пузырька по возрастанию или убыванию
Здравствуйте, Задали задачку, не могу додуматься уже неделю. Вообщем, программа сортирует массив...

Сортировка методом пузырька
Здравствуйте, напишите, пожалуйста, такую программу. Напишите программу, сортирующую массив...

Сортировка массива методом пузырька
Задание: объявляем одномерный массив целого типа, размера не менее 15 этот массив необходимо...

Сортировка методом Хаора и пузырька
Пропустил тему и понятия не имею как делать.

4
Соловьёв_Егор
58 / 58 / 53
Регистрация: 17.02.2013
Сообщений: 242
24.04.2016, 23:49 2
У меня ваш код работает, даже если в массивах есть одинаковые элементы. И если в одном массиве есть одинаковые элементы.
0
zer0mail
2458 / 2094 / 217
Регистрация: 03.07.2012
Сообщений: 7,592
Записей в блоге: 1
25.04.2016, 05:43 3
Не понимаю, зачем нужен "пузырек" при слиянии отсортированных массивов.
0
flyant
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 34
25.04.2016, 17:53  [ТС] 4
А каким методом сортировки лучше решить? Если не пузырьком?
И еще, скажите, пожалуйста, если не сложно, нужно в задаче решить такое: если два одинаковых числа в двух массивах, одно число удалить и сместить весь массив. Как это реализовать? Спасибо большое
0
Соловьёв_Егор
58 / 58 / 53
Регистрация: 17.02.2013
Сообщений: 242
25.04.2016, 18:01 5
Потому, что нужно не слепо слиять массивы в один, а слиять их так, что результирующий уже будет отсортирован, ведь слиять нужно два уже отсортированных массива. При удалении элемента сместить все элементы с позиции повторяющегося до последнего на одну позицию влево, то есть, элемент[индексПовторяющегосяЭлемента]=элемент[индексПовторяющегосяЭлемента+1]. Потом можно перевыделить память через функцию realloc() на 1 элемент меньше.
0
25.04.2016, 18:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2016, 18:01

Сортировка стека методом пузырька
Привет всем. Народ помогите плиз! Есть программа &quot;сортировка стека&quot; а в конце есть блок где...

Сортировка одномерного массива методом пузырька
Здравствуйте. Я начинающий пользователь языка Си. Мне нужна очень ваша помощь. У меня никак не...

Сортировка методом пузырька (нужны комментарии к коду)
for (int i=n-1; i&gt;=0; i--) // метод пузырька { for (int j=0; j&lt;i; j++) { if (x...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru