Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
gera08
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 9
1

Записать сортировку массива в отдельный поток

01.12.2012, 22:07. Просмотров 1337. Ответов 6
Метки нет (Все метки)

C++ (Qt)
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
void MainWindow::on_pushButton_5_clicked()
{
    QFile file("/home/gera/file.txt");
    if (!file.open(QIODevice::Text | QIODevice::ReadOnly))
        return;
    QByteArray ba = file.readLine();
    file.close();
    QList<QByteArray> baList = ba.split(' ');
    QList<int> intList;
    for (int i=0;i<baList.size();i++)
    {
      intList.append(baList[i].toInt());
 
   }
    int size = intList.length();
    int step = size / 2;//инициализируем шаг.
    while (step > 0)//пока шаг не 0
    {
      for (int i = 0; i < (size - step); i++)
                {
                    int j = i;
                    //будем идти начиная с i-го элемента
                    while (j >= 0 && intList[j] > intList[j + step])
                    //пока не пришли к началу массива
                    //и пока рассматриваемый элемент больше
                    //чем элемент находящийся на расстоянии шага
                    {
                        //меняем их местами
                        int temp = intList[j];
                        intList[j] = intList[j + step];
                        intList[j + step] = temp;
                        j--;
                    }
                }
                step = step / 2;//уменьшаем шаг
            }
 
 
 
    QFile file2("/home/gera/file2.txt");
    file2.open(QIODevice::WriteOnly);
 
 
    string str;
    for (int i = 1; i < intList.length(); i++)
        str += Int2Str(intList[i]) + " ";
 
    QString z;
    z = QString::fromStdString(str);
    ui->textBrowser_2->setText(z);
    file.close();
}
Нужно сортировку массива записать в отдельный поток. Выполнить синхронизацию между главным потоком и потоком, в котором будет сортировка.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2012, 22:07
Ответы с готовыми решениями:

Как вынести скачивание файлов в отдельный поток?
Всем привет. При старте приложения мне нужно скачать некоторый объем информации из интернета. Делаю...

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

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

Записать каждый отдельный элемент массива в отдельный textbox
Привет всем! Есть массив x(i). Как записать каждый его отдельный элемент, в отдельный textbox?

6
KeyGen
386 / 293 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
02.12.2012, 01:12 2
Отдельный поток это не проблема: Циклы в отдельном потоке
1
Dmitriy_M
1437 / 1317 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
02.12.2012, 18:58 3
Можно сделать и вот так Concurrent Programming
2
gera08
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 9
02.12.2012, 22:35  [ТС] 4
Воспользовался методом, который предложил KeyGen.
Всё вроде и работает. Если в массив записать 10000 чисел, сортирует правильно и работает без подвисания. Но при записи в массив 100000 или 1000000 чисел, не правильно происходит сортировка. Оно как бы быстрее отправляет числа на форму, чем сортирует. Поэтому, выходит, что массив не до конца отсортирован.
Как решить проблему?
0
KeyGen
386 / 293 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
02.12.2012, 22:48 5
Попробуй сначала отсортировать все, а потом на форму вывести. Скорее дело в алгоритме чем в Qt.
0
Maxim Prishchepa
Эксперт С++
1929 / 1041 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
03.12.2012, 18:56 6
полностью согласен с Dmitriy_M
QtConcurrent в помощь, + я бы ещё добавил вместо велосипедов: qSort
0
Dmitriy_M
1437 / 1317 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
03.12.2012, 20:45 7
l_a_m, если была бы merge sort или quick sort, то с MapReduce было бы проще использовать сортировку на большом количестве ядер.
0
03.12.2012, 20:45
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2012, 20:45

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

Записать каждое слово в отдельный элемент массива
Здравствуйте. Нужна помощь, выручайте. Написать программу, которая считывает текст из файла и...

Записать все двоичные числа по порядку каждую цифру в отдельный элемент массива
Дано число p - количество знаков в двоичном числе Нужно записать все двоичные числа по порядку ...

Отдельный поток
private void is_Tick(object sender, EventArgs e) { SJarvis.Enabled = false; ...

Отдельный поток
Всем добрый день. Не получается на гулить простое решение. Может у кого завалялся кусок кода...


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

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

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