Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 9
1

Сортировка вставками (методом прямого включения)

21.02.2021, 18:01. Показов 1515. Ответов 2

Author24 — интернет-сервис помощи студентам
Всем привет, только начинаю осваивать С++ и возникла такая проблема. Дали задание: Дан ряд целых чисел. Получить в порядке возрастания все различные числа, входящие в этот ряд. В моём коде выводится и в последствии сортируется рандомный массив с уже различными числами, так как одинаковые числа отсеивались уже непосредственно при формировании массива. Насколько я понимаю, моё решение не совсем соответствует условию, так как нужно из самого массива с попадающимися одинаковыми числами отсортировать только различные. Как можно реализовать данную задачу?
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
#include <iostream>
#include <ctime>
#include <windows.h>
#include <conio.h>
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    srand(time(NULL));
 
    int const SIZE = 10;
    int arr[SIZE];
 
    bool alreadyThere; 
    cout << "Массив с различными элементами: " << endl;
    for (int i = 0; i < SIZE; )
    {
        alreadyThere = false; 
        int newRandomValue = rand() % 20;
 
        for (int j = 0; j < i; j++)
        {
            if (arr[j] == newRandomValue) 
            {
                alreadyThere = true;
                break;
            }
        }
 
        if (!alreadyThere)
        {
            arr[i] = newRandomValue; 
            i++;
        }
    
        int key = arr[i];
        int j = i - 1;
    }
 
    for (int i = 0; i < SIZE; i++) 
    {
        cout << arr[i] << " "; 
    }
    cout << endl;
    
    cout << "\nОтсортированный по возрастанию массив с различными элементами: " << endl;
    for (int i = 1; i < SIZE; i++)
    {
        int key = arr[i];
        int j = i - 1;
 
        while (j >= 0 && arr[j] > key)
        {
            arr[j + 1] = arr[j];
            arr[j] = key;
            j--;
        }
    }
 
    for (int k = 0; k < SIZE; k++)
    {
        cout << arr[k] << " ";
    }
    cout << endl;
    
    _getch();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2021, 18:01
Ответы с готовыми решениями:

Сортировка методом прямого включения
Даны n целых положительных двузначных чисел. Трактуя каждое число как пару цифр из интервала 0–9,...

Сортировка методом прямого включения
Написать программу вставки последнего элемента массива после первого отрицательного элемента этого...

Сортировка прямого включения
Не переставляется первый элемент массива, как исправить? void Insertion(int *mas, int *n) { ...

Алгоритмы сортировки: прямые, улучшенные (Сортировка с помощью прямого включения (метод простых вставок))
Задание 1. Сортировка с помощью прямого включения (метод простых вставок). Методические...

2
Модератор
Эксперт функциональных языков программированияЭксперт Python
36595 / 20325 / 4218
Регистрация: 12.02.2012
Сообщений: 33,625
Записей в блоге: 13
21.02.2021, 18:40 2
Отсортировать, а потом пройтись по сортированному и выкинуть повторения
0
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 9
21.02.2021, 19:23  [ТС] 3
Переделал код так, что теперь выводятся уникальные элементы отсортированного массива, но не могу понять, как сделать, чтобы выводились различные элементы, т.е. выбрасывался только один повторяющийся элемент, а не оба?

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
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int const SIZE = 10;
    int arr[SIZE] = {1,25,5,8,3,4,7,12,8,5};
    int count = 0; 
 
    cout << "Изначальный массив: " << endl;
    for (int i = 0; i < SIZE; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
 
    for (int i = 1; i < SIZE; i++)
    {
        int key = arr[i];
        int j = i - 1;
 
        while (j >= 0 && arr[j] > key)
        {
            arr[j + 1] = arr[j];
            arr[j] = key;
            j--;
        }
    }
    
    cout << "\nОтсортированный методом вставки массив по возрастанию: " << endl;
    for (int k = 0; k < SIZE; k++)
    {
        cout << arr[k] << " ";
    }
    cout << endl;
 
    cout << "\nВсе различные числа массива по возрастанию: " << endl;
    for (int i = 0; i < SIZE; i++)
    {
        int temp = arr[i];
 
        for (int j = 0; j < SIZE; j++)
            
            if (temp == arr[j])
                count++;
        
        if (count == 1)
            cout << temp << " ";
        count = 0;
    }
    cout << endl;
 
    _getch();
}
0
21.02.2021, 19:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2021, 19:23
Помогаю со студенческими работами здесь

Сортировка методом прямого выбора
Есть двумерный массив nxn, заполненный рандомными числами. Отсортировать его методом прямого...

Сортировка методом прямого выбора
Помогите пожалуйста! Есть код, но в конце сортировка сбивается. есть массив: A={1, 6, 9, 7, 2, 0,...

Сортировка методом прямого выбора
Есть массив структур, который нужно в отдельности отсортировать методом прямого выбора по всем...

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

Сортировка массива слов методом прямого выбора
Помогите пожалуйста сделать сортировку массива слов методом прямого выбора. То есть у меня есть...

Сортировка чисел методом прямого выбора и пузырька
Надо отсортировать цисла массива с рандомом что бы положительное число росло, а отрицательное число...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru