import java.util.* ;
public class Main {
public static void main
( String [ ] args
) {
4 , 27 , 0 , 0 , 25 , 29 , 9 , 27 , 1 , 29 , 12 , 2 , 23 , 22 , 0 ,
19 , 17 , 2 , 22 , 24 , 21 , 27 , 6 , 6 , 7 , 4 , 20 , 7 , 26 , 10
} ) ) ;
QuickSortWithThreads obj = new QuickSortWithThreads( array,0 ,array.size ( ) - 1 ) ;
for ( int i= 0 ; i< array.size ( ) ; i++ )
System .
out .
println ( array.
get ( i
) ) ;
}
}
class QuickSortWithThreads {
public QuickSortWithThreads
( ArrayList < Integer
> arr,
int left,
int right
) { quicksort( arr,left,right) ;
}
static void quicksort
( ArrayList < Integer
> arr,
int left,
int right
) { int pivot;
if ( left< right) {
pivot = partition( arr,left,right) ;
QuickSortThread threadLeftSide = new QuickSortThread( arr,pivot+ 1 ,right) ;
threadLeftSide.start ( ) ;
quicksort( arr,left,pivot- 1 ) ;
try {
threadLeftSide.join ( ) ;
// TODO Auto-generated catch block
e.printStackTrace ( ) ;
}
}
}
static int partition
( ArrayList < Integer
> arr,
int left,
int right
) {
int pivot = arr.get ( right) ;
int i = left - 1 ;
for ( int j= left; j<= right- 1 ; j++ ) {
if ( arr.get ( j) <= pivot) {
i= i+ 1 ;
exchange( arr,i,j) ;
}
}
exchange( arr,i+ 1 ,right) ;
return i+ 1 ;
}
static void exchange( ArrayList< Integer> arr, int i,int j) {
int swap = arr.get ( i) ;
arr.set ( i,arr.get ( j) ) ;
arr.set ( j, swap) ;
}
private static class QuickSortThread
extends Thread { int right;
int left;
ArrayList< Integer> refArray;
public QuickSortThread( ArrayList< Integer> array,int left,int right) {
this .right = right;
this .left = left;
refArray = new ArrayList< Integer> ( ) ;
refArray= array;
}
public void run( ) {
quicksort( refArray,left,right) ;
}
} }
aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewoKcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoKICAgIEFycmF5TGlzdCA8SW50ZWdlcj4gYXJyYXkgPSBuZXcgQXJyYXlMaXN0KEFycmF5cy5hc0xpc3QobmV3IEludGVnZXJbXXsKICAgICA0LCAyNywgMCwgMCwgMjUsIDI5LCA5LCAyNywgMSwgMjksIDEyLCAyLCAyMywgMjIsIDAsCiAgICAgMTksIDE3LCAyLCAyMiwgMjQsIDIxLCAyNywgNiwgNiwgNywgNCwgMjAsIDcsIDI2LCAxMAogICAgfSkpOwogICAgUXVpY2tTb3J0V2l0aFRocmVhZHMgb2JqID0gbmV3IFF1aWNrU29ydFdpdGhUaHJlYWRzKGFycmF5LDAgLGFycmF5LnNpemUoKS0xICk7CgogICAgZm9yKGludCBpPTA7IGk8YXJyYXkuc2l6ZSgpO2krKykKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFycmF5LmdldChpKSk7Cgp9Cn0KCgpjbGFzcyBRdWlja1NvcnRXaXRoVGhyZWFkcyB7CgpwdWJsaWMgUXVpY2tTb3J0V2l0aFRocmVhZHMoQXJyYXlMaXN0IDxJbnRlZ2VyPiBhcnIsIGludCBsZWZ0LCBpbnQgcmlnaHQpeyAgCiAgICBxdWlja3NvcnQoYXJyLGxlZnQscmlnaHQpOwoKfQoKc3RhdGljIHZvaWQgIHF1aWNrc29ydChBcnJheUxpc3QgPEludGVnZXI+IGFyciwgaW50IGxlZnQsIGludCByaWdodCkgIHsKICAgICAgICBpbnQgcGl2b3Q7CgogICAgICAgIGlmKGxlZnQ8cmlnaHQpewogICAgICAgICAgICBwaXZvdCA9IHBhcnRpdGlvbihhcnIsbGVmdCxyaWdodCk7ICAKICAgICAgICAgICAgUXVpY2tTb3J0VGhyZWFkIHRocmVhZExlZnRTaWRlID0gbmV3IFF1aWNrU29ydFRocmVhZChhcnIscGl2b3QrMSxyaWdodCk7CiAgICAgICAgICAgIHRocmVhZExlZnRTaWRlLnN0YXJ0KCk7ICAKICAgICAgICAgICAgcXVpY2tzb3J0KGFycixsZWZ0LHBpdm90LTEpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgdGhyZWFkTGVmdFNpZGUuam9pbigpOwogICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCiAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICB9ICAgICAgICAgICAKCiAgICAgICAgfQoKfQoKc3RhdGljICBpbnQgcGFydGl0aW9uKEFycmF5TGlzdCA8SW50ZWdlcj4gYXJyLCBpbnQgbGVmdCwgaW50IHJpZ2h0KQogICAgewoKICAgICAgaW50IHBpdm90ID0gYXJyLmdldChyaWdodCk7CiAgICAgIGludCBpID0gbGVmdCAtMTsKICAgICAgZm9yKCBpbnQgaj1sZWZ0OyBqPD1yaWdodC0xO2orKyl7CiAgICAgICAgICBpZiAoYXJyLmdldChqKTw9cGl2b3QpewogICAgICAgICAgICAgIGk9aSsxOwogICAgICAgICAgICAgIGV4Y2hhbmdlKGFycixpLGopOwogICAgICAgICAgfQogICAgICB9CiAgICAgICAgICBleGNoYW5nZShhcnIsaSsxLHJpZ2h0KTsKCiAgICAgIHJldHVybiBpKzE7Cn0Kc3RhdGljIHZvaWQgZXhjaGFuZ2UoQXJyYXlMaXN0PEludGVnZXI+IGFyciwgaW50IGksaW50IGopewogICAgICAgIGludCBzd2FwID0gYXJyLmdldChpKTsKICAgICAgICBhcnIuc2V0KGksYXJyLmdldChqKSk7IAogICAgICAgIGFyci5zZXQoaiwgc3dhcCk7CiAgICB9Cgpwcml2YXRlIHN0YXRpYyBjbGFzcyBRdWlja1NvcnRUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewogICAgaW50IHJpZ2h0OwogICAgaW50IGxlZnQ7CiAgICBBcnJheUxpc3Q8SW50ZWdlcj4gcmVmQXJyYXk7IAoKICAgIHB1YmxpYyBRdWlja1NvcnRUaHJlYWQoQXJyYXlMaXN0PEludGVnZXI+IGFycmF5LGludCBsZWZ0LGludCByaWdodCkgewogICAgICAgIHRoaXMucmlnaHQgPSByaWdodDsKICAgICAgICB0aGlzLmxlZnQ9bGVmdDsKICAgICAgICByZWZBcnJheSA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKICAgICAgICByZWZBcnJheT1hcnJheTsgCgogICAgfQoKICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICBxdWlja3NvcnQocmVmQXJyYXksbGVmdCxyaWdodCk7CgoKICAgIH0KfX0=