Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 2
Регистрация: 07.02.2011
Сообщений: 221
1

Многопоточная сортировка массива

07.10.2011, 06:28. Показов 2247. Ответов 3
Метки нет (Все метки)

Добрый день, подскажите пожалуйста: как можно, используя threads отсортировать два массива, а потом объеденить
все это должно быть с использованием threads
(первые два для сортировки , третий для объединения)

Спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2011, 06:28
Ответы с готовыми решениями:

Многопоточная конкатенация
Здравствуйте! Я на каждый запрос в систему набор из 10 значений соединяю через запятую в String...

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

Многопоточная обработка дерева
Есть следующий класс реализующий интерфейс Runnable: public class TreeHandler implements...

Многопоточная отправка json запросов
Здравствуйте, пишу приложение которое отправляет json запрос в систему статистики и та возвращает...

3
382 / 330 / 159
Регистрация: 06.12.2010
Сообщений: 894
07.10.2011, 07:53 2
Я уже думал отсортировать с потоками
http://en.wikipedia.org/wiki/Merge_sort
0
1 / 1 / 2
Регистрация: 07.02.2011
Сообщений: 221
07.10.2011, 20:54  [ТС] 3
а можете подсказать как используют join?
Я написала без него, а надо с ним.

Добавлено через 12 часов 26 минут
может кому-то еще пригодится
Java
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import java.util.*;
 
 
public class Sort{
    public static void main (String[] args){
        Scanner myScanner = new Scanner(System.in);
        System.out.println("Enter the size of an erray: ");
        int size = myScanner.nextInt();
        int[] firstArray = new int[size];
        System.out.println("Enter the item of array;");
        for(int i=0; i<size; i++){
            firstArray[i] = myScanner.nextInt();
        }
        int sizeM = size/2;
 
        int[] firstHalf; 
        int[] secondHalf; 
                
        if((size%2) == 0){
            firstHalf = new int[sizeM]; 
            secondHalf = new int[sizeM]; 
            for(int i=0; i<sizeM; i++){
                firstHalf[i] = firstArray[i];
                secondHalf[i] = firstArray[i+sizeM];
            }
        }
                        
        else{
            firstHalf = new int[sizeM];
            secondHalf = new int[sizeM+1];
            for(int i=0; i<sizeM; i++){
                firstHalf[i] = firstArray[i];
            }
            for(int i=0; i<sizeM+1; i++){
                secondHalf[i] = firstArray[i+sizeM];
            }
        }
        System.out.println(" first half of an array ");
        for(int i=0; i<firstHalf.length;i++){
            System.out.print(firstHalf[i]+ " ");
        }
        System.out.println("");
        System.out.println(" second half of an array ");
        for(int i=0; i<secondHalf.length;i++){
            System.out.print(secondHalf[i] + " " );
        }
        
        Thread thread1 = new Thread(new MergeTask(firstHalf)); 
        Thread thread2 = new Thread(new MergeTask(secondHalf)); 
        Thread thread3 = new Thread(new MergeTask(firstHalf, secondHalf)); 
        System.out.println(" ");
        System.out.println(" Sorted arrays " );
        
        thread1.start();        
        try { 
            thread1.join(); 
        }
        catch(InterruptedException ex) { } 
        
        thread2.start();
        try{ 
            thread2.join(); 
        }
        catch(InterruptedException ex) { } 
        
        thread3.start(); 
        try { 
            thread3.join(); 
        }
        catch(InterruptedException ex) { }
    }
}
 
        
class MergeTask extends Thread{ 
    int[] nums; 
    MergeTask(int[] n){
        nums = n; 
    } 
        
    MergeTask(int[] x, int[] y){
        int middle = x.length; 
        nums = new int[x.length + y.length]; 
        for(int i = 0; i < (x.length + y.length); i++){ 
            if(i < middle){ 
                nums[i] = x[i]; 
            } 
            else{ 
                nums[i] = y[i - middle]; 
            } 
        } 
    } 
    
    public void run() { 
        Arrays.sort(this.nums); 
        for(int i = 0; i < nums.length; i++) { 
            System.out.print(nums[i] + " "); 
        }
        System.out.println(); 
    } 
}
0
15 / 15 / 5
Регистрация: 19.10.2009
Сообщений: 187
07.10.2011, 22:29 4
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
thread1.start();                
                try { 
                        thread1.join(); 
                }
                catch(InterruptedException ex) { } 
                
                thread2.start();
                try{ 
                        thread2.join(); 
                }
                catch(InterruptedException ex) { } 
                
                thread3.start(); 
                try { 
                        thread3.join(); 
                }
                catch(InterruptedException ex) { }
Можно создать группу потоков и ждать пока они все завершаться, на сколько я помню.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2011, 22:29

Многопоточная программа выполняется медленнее чем однопоточная
Программа должна создать один поток исполнения для каждого файла и использовать эти потоки для...

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

Многопоточная сортировка
У меня есть текстовый файл, в нем хранится массив значений, мне нужно считать данные из файла,...

Многопоточная сортировка
Здравствуйте, форумчане. Решаю задачу обработки данных большого размера 1 гб . Данные нужно ...


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

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

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