1
+ package com .cdac .threads .sorting ;
2
+ /*
3
+ * Author: Suraj Subramanian
4
+ *
5
+ * Quick Sort implemented using Generics and Multithreading
6
+ *
7
+ * */
8
+
9
+ public class QuickSortMultiThreaded <T extends Comparable <T >> implements Runnable {
10
+
11
+ private T arr [];
12
+ private int start ;
13
+ private int end ;
14
+
15
+ // Driver
16
+ public static void main (String [] args ) {
17
+ Integer [] data = { 5 , 10 , 4 , 1 , 2 , 88 , 11 , 23 , 13 };
18
+ new QuickSortMultiThreaded <Integer >().quickSort (data );
19
+
20
+ for (Integer integer : data ) {
21
+ System .out .println (integer );
22
+ }
23
+ }
24
+
25
+ private int partition (T arr [], int start , int end ) {
26
+ // set pivot as last element
27
+ T pivot = arr [end ];
28
+ int index = start - 1 ;
29
+
30
+ for (int i = start ; i <= end - 1 ; i ++) {
31
+ if (arr [i ].compareTo (pivot ) < 0 ) {
32
+ index ++;
33
+ T temp = arr [index ];
34
+ arr [index ] = arr [i ];
35
+ arr [i ] = temp ;
36
+ }
37
+ }
38
+
39
+ T temp = arr [index + 1 ];
40
+ arr [index + 1 ] = arr [end ];
41
+ arr [end ] = temp ;
42
+
43
+ return index + 1 ;
44
+ }
45
+
46
+ private void quickSort (T arr []) {
47
+ Thread t = new Thread (new QuickSortMultiThreaded <T >(arr , 0 , arr .length - 1 ));
48
+ t .start ();
49
+ try {
50
+ t .join ();
51
+ } catch (InterruptedException e ) {
52
+ e .printStackTrace ();
53
+ }
54
+ }
55
+
56
+ public QuickSortMultiThreaded (T arr [], int start , int end ) {
57
+ super ();
58
+ this .arr = arr ;
59
+ this .start = start ;
60
+ this .end = end ;
61
+ }
62
+
63
+ public QuickSortMultiThreaded () {
64
+ super ();
65
+ }
66
+
67
+ @ Override
68
+ public void run () {
69
+ if (start < end ) {
70
+ // partition the array
71
+ int partition = partition (arr , start , end );
72
+
73
+ Thread t1 = new Thread (new QuickSortMultiThreaded <T >(arr , start , partition - 1 ));
74
+ Thread t2 = new Thread (new QuickSortMultiThreaded <T >(arr , partition + 1 , end ));
75
+
76
+ t1 .start ();
77
+ t2 .start ();
78
+
79
+ try {
80
+ t1 .join ();
81
+ } catch (InterruptedException e ) {
82
+ e .printStackTrace ();
83
+ }
84
+ }
85
+ }
86
+
87
+ }
0 commit comments