Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.03.2022
Сообщений: 24

Сортировка массива

24.05.2022, 11:42. Показов 550. Ответов 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
#include <iostream>
#include <vector>
 
using namespace std;
 
void vec_sort(vector<int>& arr, int first, int last)
{
    int tmp;
    int i = first, j = last;
    int x = rand() % 20 + 1;
    do
    {
        while (arr[i] < x) i++;
        while (arr[j] > x) j--;
        if (i <= j) 
        {
            tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++;
            j--;
        }
    } while (i<j);
    
    if (first < j) vec_sort(arr, first, j);
    if (i < last) vec_sort(arr, i, last);
}
 
int main(int argc, const char * argv[]) {
    int size = rand() % 10 + 1;
    cout << "size: " << size << endl;
    
    vector<int> arr(size);
    
    for( int i = 0; i < size; ++i )
        arr[i] = rand() % 20 + 1;
 
    cout << endl << "-- Basic Array --" << endl;
    for (int i = 0; i < arr.size(); i++)
        cout << arr[i] << " ";
    cout << endl << endl;
    
    cout << "-- Sorted Array --" << endl;
    vec_sort(arr, 0, size - 1);
    
    for (int i = 0; i < arr.size(); i++)
        cout << arr[i] << " ";
    cout << endl << endl;
    
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.05.2022, 11:42
Ответы с готовыми решениями:

Как работает время в программе, почему сортировка массива на 1000 элементов быстрее, чем сортировка массива на 8?
#include &lt;iostream&gt; #include &lt;chrono&gt; #include &lt;cmath&gt; #include &quot;List.h&quot; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; //генератор...

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

Сортировка массива двумя методами: адресная сортировка и сортировка вставками
Осуществить сортировку заданного массива двумя методами: адресная сортировка и сортировка вставками Определить количество проходов по...

1
458 / 294 / 191
Регистрация: 23.06.2018
Сообщений: 678
24.05.2022, 14:25
Лучший ответ Сообщение было отмечено kollich27 как решение

Решение

1. int не действительное число.
2. Ваша рекурсия не похожа на сортировку одним проходом.
3. Рандомить x внутри рекурсивной сортировки - гениально.

Смог придумать только эту гадость... Зато учитывает возможность arr[i] == x
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
void vec_sort(vector<double>& arr, double x)
{
    int tmp;
    int leftRead = 0, rightRead = arr.size() - 1;
    int leftWrite = leftRead, rightWrite = rightRead;
 
    do
    {
        while (leftRead < rightRead && arr[leftRead] <= x) {
            if (arr[leftRead] < x) {
                arr[leftWrite++] = arr[leftRead];
            }
            leftRead++;
        }
        while (leftRead < rightRead && arr[rightRead] >= x) {
            if (arr[rightRead] > x) {
                arr[rightWrite--] = arr[rightRead];
            }
            rightRead--;
        }
 
        if (leftRead < rightRead) {
            tmp = arr[leftRead];
            arr[leftWrite++] = arr[rightRead];
            arr[rightWrite--] = tmp;
        } else if (leftRead == rightRead) {
            if (arr[leftRead] < x) {
                arr[leftWrite++] = arr[leftRead];
            } else if (arr[leftRead] > x) {
                arr[rightWrite--] = arr[leftRead];
            }
        }
        leftRead++;
        rightRead--;
    } while (leftRead <= rightRead);
 
    while (leftWrite <= rightWrite) {
        arr[leftWrite++] = x;
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2022, 14:25
Помогаю со студенческими работами здесь

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным элементом. Немогу понять как устоновить...

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

Сортировка массива по сумме цифр элементов массива в порядке возрастания(неубывания)
Мне нужно написать программу, которая будет сортировать заданный массив по сумме цифр его элементов в порядке неубывания(возрастания). Я то...

Сортировка массива: перенести положительные числа в начало, а отрицательные - в конец массива
Дан вещественный массив A(N). Отсортировать его таким образом, чтобы все положительные числа находились в начале, а отрицательные - в конце...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru