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

Не могу отсортировать массив 5 млн. Очень долго длится обработка

21.06.2022, 22:04. Показов 406. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Задание следующее:
нужно отсортировать массив по возрастанию и вывести первые 5 элементов
вот мой код:

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 <cmath>
#include <vector>
#include <fstream>
 
using namespace std;
void qsort(vector<int> mas, int low, int high);
 
int main(){
 
    vector<int>vec;
    ifstream input("sort9.txt");
    int line;
    if (input){
        cout<<"Success"<<endl;
        do {
            input >> line;
            vec.push_back(line);
            } while (!input.eof());
    int a=vec.size()-1;
    cout<<a<<endl;
    cout<<vec[a/2]<<endl;
    qsort(vec,0,a); 
    for (int i=0; i<5;i++) cout<<vec[i]<<endl;
    }
    return 0;
}
 
void qsort(vector <int> mas, int low, int high) {
    //Указатели в начало и в конец массива
    int i = low;
    int j = high;
 
    //Центральный элемент массива
    int mid = mas[i+(j-i) / 2];
    //Делим массив
    while(i<=j) {
        //Пробегаем элементы, ищем те, которые нужно перекинуть в другую часть
        //В левой части массива пропускаем(оставляем на месте) элементы, которые меньше центрального
        while(mas[i] < mid) {
            i++;
         }
        //В правой части пропускаем элементы, которые больше центрального
        while(mas[j] > mid) {
            j--;
        }
 
        //Меняем элементы местами
        if (i <= j) {
                if(mas[i]>mas[j]){
                    int tmp = mas[i];
                    mas[i] = mas[j];
                    mas[j] = tmp;
                }
            i++;
            j--;
        }
    }
 
    //Рекурсивные вызовы, если осталось, что сортировать
    if(j > low) {
        //"Левый кусок"
        qsort(mas, low, j);
    }
    if (i < high) {
        //"Правый кусок"
        qsort(mas, i, high);
    }
}
Что-то явно не то, поскольку программа выполняется длительное время и не завершается.
Может есть идеи, что не так?
Предполагаю, что какие-то условия неверны и не выходит из рекурсии, но не понимаю, что неправильно.
Вложения
Тип файла: rar sort9.rar (6.6 Кб, 5 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2022, 22:04
Ответы с готовыми решениями:

Обработка UPDATE запроса длится очень долго. SQL Server - 10.50.4000
Привет, народ, У меня возникла ситуация, которую я не могу самостоятельно объяснить. Есть одна таблица (целевая таблица) с примерно ...

Подключение к SQLServer Express 2014 длится очень долго
Здравствуйте. Я установил SQLServer Express 2014 (SQLEXPRADV_x64_ENU). Запустил свою программу по работе к БД и заметил что...

Обработка выполняется очень долго. Обработка файлов
На вход идут данные от 2007 года до сегодня. Просто вывод дат.. очень быстро. Только включаю обработку файла то занимает очень много...

1
 Аватар для PencilTorch
90 / 60 / 32
Регистрация: 06.08.2020
Сообщений: 220
21.06.2022, 22:12
Цитата Сообщение от wishes5 Посмотреть сообщение
void qsort(vector<int> mas, int low, int high);
для затравочки не мешало бы вектор в функцию по адресу давать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.06.2022, 22:12
Помогаю со студенческими работами здесь

Проццес importing при запуске проекта длится слишком долго
Здравствуйте,поначалу когда мой проект был на диске C,проект грузился быстро.Но теперь когда он на флешке такое ощущение что он вообще не...

В чем ошибка , я уже очень долго понять не могу ?
У меня проблема с тем что код не распознает диапазон где Целью лабораторной работы №1.1. «Разветвленные алгоритмы» является...

Комп долго включается и выключается очень долго
Всем привет народ, помогите пожалуйста уже устал искать проблему, проблема в том что я установил 10 винду года 3 назад всё было хорошо,...

Когда загружаешь винду то загружает долго очень, да и приходит в себя тоже долго. все звуки воспроизводятся с искажением
Вообщем так, компик старенький , когда загружаешь винду то загружает долго очень, да и приходит в себя тоже долго. все звуки...

Как записать очень длинную строку (свыше 2 млн. символов)?
столкнулся с проблемой.. в строку записывается всего 1137356 символов... а мне надо записать по меньшей мере 2 миллиона символов.... не...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru