Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
basic021
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 11
#1

Сортировка большого одномерного массива - C++

06.06.2014, 15:26. Просмотров 357. Ответов 3
Метки нет (Все метки)

Вот что у меня получилось. Сортировка по возростанию массива со случайными элементами. Так работает нормально, но мне нужно чтобы массив был из 100 000 тыс чисел. если меняю 100 на 100 000 тыс то очень долго объявляет. Вопрос в том что можно ли быстро объявить или объявить но не выводить на экран. И так же отсортировать?
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
#include "stdafx.h"
#include<iostream> 
#include<cstdlib>
using namespace std; 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (0, "");
 
    const int arr = 100;       // меняю 100 на 100 000 тыс                                 
           int A[100];                  // меняю  100 на 100 000 тыс           
    int i = 0;
    int j = 0;
    int k = arr - 2;
    int tmp = 0;
    bool is_swap = false;
    for(int i = 0; i < sizeof(A) / sizeof(int); ++i)
    A[i] = 0+rand()%100; 
    cout<<"неотсортированный массив \n"<<endl;
    for(int i = 0; i < sizeof(A) / sizeof(int); ++i)
        cout << "mas["<<i<<"] "<<A[i] << endl; // если закоментировать эту строку, то не работает
            for (i = 0; i<=k; ++i)
    {
        is_swap = false;
        for (j = k; j>=i; --j)
        {
            if (A[j] > A[j+1])
            {
                tmp = A[j+1];
                A[j+1] = A[j];
                A[j] = tmp;
                is_swap = true;
            }
        }
        if (!is_swap) break; 
    }
            cout<<endl;
        cout<<"Отсортированный массив по возрастоанию \n"<<endl;
    for (i = 0; i<arr; ++i)
    {
        
        cout<<"mas["<<i<<"] "<<A[i]<<endl;
    }
        
        cin.get();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2014, 15:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка большого одномерного массива (C++):

Сортировка одномерного массива - C++
Люди!!!! Помогите студенту сдать гак. Надо упорядочить одномерный массив из вешественных элементов. Если подкините код, который нано...

Сортировка одномерного массива - C++
задание отсортировать элементы массива, находящиеся слева от найденной позиции по убыванию, а элементы массива, находящиеся справа от...

Сортировка одномерного массива - C++
Массив из 10 целых чисел заполнить случайными числами от -5 до 5. Произвести сортировку массива. Вывести на экран исходный и...

Сортировка одномерного массива - C++
Есть массив {1,2,3,4,5,6,7}, необходимо изменить порядок элементов {7,6,5,4,3,2,1}

Сортировка одномерного массива - C++
Задача: сортировка одномерного массива методом выбора. #include &lt;iostream&gt; using namespace std; int main() { const...

Сортировка одномерного массива - C++
Ка реализовать такой способ : &quot;из всех элементов массива выбрать наименьший и поставить его на первое место и дальше начиная со второго...

3
Tchikh
50 / 70 / 11
Регистрация: 23.01.2013
Сообщений: 273
06.06.2014, 15:40 #2
Ваша программа работает за O(N^2), где N - количество элементов в массиве. Для того, чтобы массив сортировался быстро, вам надо использовать быструю сортировку. Например, есть встроенная сортировка в библиотеке <algorithm> sort. Если Вы хотите написать сами, то можете погуглить QSort.
1
azbest
41 / 41 / 8
Регистрация: 12.03.2013
Сообщений: 148
06.06.2014, 15:50 #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
#include <iostream>
#include <vector>
#include <algorithm>
#include <stdio.h>
#include <time.h>
 
#define DIAPAZONE 10000
 
using namespace std;
 
int main()
{
    vector <int> v;         // вектор (динамический масив) чисел
    int n=100000;           // количество элеементов
    srand(time(0));         // "включение" генератора)
    while (n--) {
        v.push_back(rand()%DIAPAZONE);  // добавляем случайное число
    }
    stable_sort(v.begin(),v.end());     // сортировка массива от начала до конца
    freopen("sorted.txt","w",stdout);   // изменяем поток вывода из консоли в файл
    for (n=0;n<v.size();++n) printf("%d\n",v[n]);   // записываем (у меня заняло 0,137 сек)
    return 0;
}
stable_sort() работает немного быстрее чем sort() если в массиве есть повторяющиеся элементы когда диапазон случайных чисел менше их количества например.
1
basic021
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 11
08.06.2014, 12:12  [ТС] #4
Всем спасибо, теперь понятно!
0
08.06.2014, 12:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 12:12
Привет! Вот еще темы с ответами:

Сортировка одномерного массива - C++
Написать программу сортировки массива методом:Камнем, сортировка Шелла, пирамильная сортировка, сортировка слиянием. (массив из случайных...

Сортировка одномерного массива - C++
Всем доброго времени суток! Имеется одномерный массив A(N), состоящий из 0, 1 или 2. Переставить элементы массива так, чтобы сначала...

Сортировка одномерного массива - C++
Здравствуйте, помогите пожалуйста с написанием кода. Дан одномерный массив. Его надо проверить отсортирован ли он по убыванию, если...

Сортировка одномерного массива - C++
#include&lt;iostream.h&gt; #include &lt;time.h&gt; int main () { const int n=23; int T,i,m,k,temp; srand((unsigned)time(NULL));...


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

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

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