Skip to content

Commit 13f6f21

Browse files
committed
notes and parrallel intro
1 parent 4bbf277 commit 13f6f21

File tree

10 files changed

+224
-0
lines changed

10 files changed

+224
-0
lines changed

Concurrency_Multithreading_and_Parallel_Computing_in_Java/.project

+11
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,15 @@
1414
<natures>
1515
<nature>org.eclipse.jdt.core.javanature</nature>
1616
</natures>
17+
<filteredResources>
18+
<filter>
19+
<id>1720793078198</id>
20+
<name></name>
21+
<type>30</type>
22+
<matcher>
23+
<id>org.eclipse.core.resources.regexFilterMatcher</id>
24+
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
25+
</matcher>
26+
</filter>
27+
</filteredResources>
1728
</projectDescription>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package org.ashfaq.dev.parallelcomputing;
2+
3+
public class MergeSort {
4+
private int[] nums;
5+
6+
private int[] temparray;
7+
8+
public MergeSort(int[] nums) {
9+
this.nums = nums;
10+
this.temparray = new int[nums.length];
11+
// TODO Auto-generated constructor stub
12+
}
13+
14+
public void sort() {
15+
mergesort(0, nums.length - 1);
16+
}
17+
18+
private void mergesort(int low, int high) {
19+
if (low >= high) {
20+
return;
21+
}
22+
23+
int mid = (low + high) / 2;
24+
25+
mergesort(low, mid);
26+
mergesort(mid + 1, high);
27+
28+
merge(low, mid, high);
29+
}
30+
31+
private void merge(int low, int mid, int high) {
32+
for (int i = low; i <= high; i++) {
33+
temparray[i] = nums[i];
34+
}
35+
36+
int i = low;
37+
int j = mid + 1;
38+
int k = low;
39+
40+
while (i <= mid && j <= high) {
41+
if (temparray[i] < temparray[j]) {
42+
nums[k] = temparray[i];
43+
i++;
44+
} else {
45+
nums[k] = temparray[j];
46+
j++;
47+
}
48+
k++;
49+
}
50+
51+
while (i <= mid) {
52+
nums[k] = temparray[i];
53+
i++;
54+
k++;
55+
}
56+
57+
while (j <= high) {
58+
nums[k] = temparray[j];
59+
j++;
60+
k++;
61+
}
62+
63+
}
64+
65+
public void swap(int i, int j) {
66+
int temp = nums[i];
67+
nums[i] = nums[j];
68+
nums[j] = temp;
69+
}
70+
71+
public void showArray() {
72+
for (int i = 0; i < nums.length; i++) {
73+
System.out.print(nums[i]+" ");
74+
}
75+
}
76+
77+
public static void main(String[] args) {
78+
79+
int[] arr = { 1, 5, 4, 3, 2, 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
80+
MergeSort ms = new MergeSort(arr);
81+
ms.sort();
82+
ms.showArray();
83+
84+
}
85+
86+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
package org.ashfaq.dev.parallelcomputing;
2+
3+
public class ParallelMergeSort {
4+
5+
private int[] nums;
6+
7+
private int[] temparray;
8+
9+
private void parallelMergesort(int low, int high, int numOfThreads) {
10+
11+
if (numOfThreads <= 1) {
12+
mergesort(low, high);
13+
return;
14+
}
15+
16+
int middle = (low + high) / 2;
17+
18+
Thread leftSorted = createThread(low, middle, numOfThreads);
19+
Thread rightSorted = createThread(middle + 1, high, numOfThreads);
20+
21+
leftSorted.start();
22+
23+
rightSorted.start();
24+
25+
try {
26+
leftSorted.join();
27+
rightSorted.join();
28+
} catch (InterruptedException e) {
29+
// TODO Auto-generated catch block
30+
e.printStackTrace();
31+
}
32+
33+
merge(low, middle, high);
34+
35+
}
36+
37+
public Thread createThread(int low, int high, int numOfThreads) {
38+
39+
return new Thread() {
40+
@Override
41+
public void run() {
42+
43+
parallelMergesort(low, high, numOfThreads / 2);
44+
}
45+
46+
};
47+
}
48+
49+
public ParallelMergeSort(int[] nums) {
50+
this.nums = nums;
51+
this.temparray = new int[nums.length];
52+
// TODO Auto-generated constructor stub
53+
}
54+
55+
public void sort() {
56+
mergesort(0, nums.length - 1);
57+
}
58+
59+
private void mergesort(int low, int high) {
60+
if (low >= high) {
61+
return;
62+
}
63+
64+
int mid = (low + high) / 2;
65+
66+
mergesort(low, mid);
67+
mergesort(mid + 1, high);
68+
69+
merge(low, mid, high);
70+
}
71+
72+
private void merge(int low, int mid, int high) {
73+
for (int i = low; i <= high; i++) {
74+
temparray[i] = nums[i];
75+
}
76+
77+
int i = low;
78+
int j = mid + 1;
79+
int k = low;
80+
81+
while (i <= mid && j <= high) {
82+
if (temparray[i] < temparray[j]) {
83+
nums[k] = temparray[i];
84+
i++;
85+
} else {
86+
nums[k] = temparray[j];
87+
j++;
88+
}
89+
k++;
90+
}
91+
92+
while (i <= mid) {
93+
nums[k] = temparray[i];
94+
i++;
95+
k++;
96+
}
97+
98+
while (j <= high) {
99+
nums[k] = temparray[j];
100+
j++;
101+
k++;
102+
}
103+
104+
}
105+
106+
public void swap(int i, int j) {
107+
int temp = nums[i];
108+
nums[i] = nums[j];
109+
nums[j] = temp;
110+
}
111+
112+
public void showArray() {
113+
for (int i = 0; i < nums.length; i++) {
114+
System.out.print(nums[i] + " ");
115+
}
116+
}
117+
118+
public static void main(String[] args) {
119+
120+
int[] arr = { 1, 5, 4, 3, 2, 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
121+
MergeSort ms = new MergeSort(arr);
122+
ms.sort();
123+
ms.showArray();
124+
125+
}
126+
127+
}

Notes/multithreading_parallel.zip

5.11 MB
Binary file not shown.

0 commit comments

Comments
 (0)