0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 26
1

Сортировка массива на 1000000 (миллион) элементов

01.12.2019, 22:56. Показов 7189. Ответов 1

Всем привет))
Нужно отсортировать большой числовой массив (1000000) сортировкой слиянием.
Написал алгоритм, который работает.
Но компилятор не хочет сортировать 1000000 элементов.
Вот код:
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
70
71
72
#include "pch.h"
#include <iostream>
#include <ctime>
 
 
void showData(const double *const arr, const int size) {
    for (int i = 0; i < size; i++) {
        std::cout << arr[i] << '\t';
    }
}
 
void mergeSort(double*arr, int low, int high) {
 
    if ((high - low) < 2) {
        if (arr[low] > arr[high]) {
            int temp = arr[low];
            arr[low] = arr[high];
            arr[high] = temp;
        }
        return;
    }
    mergeSort(arr, low, low + (high - low) / 2);
    mergeSort(arr, (low + (high - low) / 2) + 1, high);
 
    std::size_t l1 = low;
    std::size_t h1 = low + (high - low) / 2;
    std::size_t l2 = h1 + 1;
    std::size_t h2 = high;
 
    double*temp = new double[(high - low) + 1];
    std::size_t tempPosition = 0;
 
 
    while (tempPosition <= high - low) {
        if (l1 > h1 || (l2 <= h2 && arr[l1] >= arr[l2])) {
            temp[tempPosition++] = arr[l2];
            l2++;
        }
        else {
            temp[tempPosition++] = arr[l1];
            l1++;
            
        }
    }
 
    for (int i = 0; i < high + 1, low <= high; i++, low++) {
        arr[low] = temp[i];
    }
 
    delete[]temp;
 
}
 
 
int main()
{
    srand(time(NULL));
    const int SIZE = 1000000;
    double arr[SIZE];
    for (int i = 0; i < SIZE; i++) {
        arr[i] = (rand() %10000)+(((rand()%1000+1)*1.0)/1000);
    }
    //showData(arr, SIZE);
    std::cout << std::endl << std::endl;
    time_t start_count = clock();
    mergeSort(arr, 0, SIZE-1);
    time_t end_count = clock();
    double seconds = ((end_count - start_count)*1.0) / CLOCKS_PER_SEC;
    showData(arr, SIZE);
    std::cout << "\nTime is " << seconds << " seconds";
    return 0;
}
Ссылка на скриншот ошибки


Добавлено через 54 минуты
Скриншот не грузит. Ошибка Stack overflow (стэк переполненный)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2019, 22:56
Ответы с готовыми решениями:

Одномерные массивы. Вставка, удаление элементов массива. Перестановка элементов массива. Сортировка массива методом пузырька
Помогите пожалуйста! Дан массив, состоящий из N букв латинского алфавита а) Заполнить массив...

Set на миллион элементов
Здравствуйте уважаемые программисты, подскажите пожалуйста. У меня в системе предположительное...

Сортировки для массива на миллион чисел
здраствуйте у меня задание надо написать 4-ре сортировки для массива на милион чисел и...

Сортировка элементов массива по убыванию, сумма элементов массива
Дан массив А. Выполнить сортировку элементов массива по убыванию. Вывести новый массив на печать....

1
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
01.12.2019, 23:39 2
Лучший ответ Сообщение было отмечено zEEmperon как решение

Решение

И вы по запросу Stack Overflow не нашли решения?
Нужно использовать указатели
Замените
double arr[SIZE] на double* arr = double[SIZE];
Возможно ещё всплывут ошибки думаю их исправить будет не проблема
А, и для сортировки лучше использовать не int low, int high, а uint32_t или uint64_t зачем вам отрицательные значения?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2019, 23:39
Помогаю со студенческими работами здесь

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

Чтение элементов массива из файла, запись в листбокс и сортировка массива
Здравствуйте, помогите решить проблему..шарп только начали изучать, пояснений толковых никаких не...

Сортировка массива по возрастанию суммы делителей элементов этого массива
Задан массив, заполненный случайными целыми положительными числами. Произвести его сортировку в...

Сортировка элементов массива
Массив вводится в 3DateGridView. Разработать приложение демонстрирующее работу с одномерный...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru