Skip to content

Commit 95133be

Browse files
author
codelogicws
committed
QuickSort
fixed
1 parent 8908420 commit 95133be

File tree

4 files changed

+53
-50
lines changed

4 files changed

+53
-50
lines changed
Binary file not shown.
Binary file not shown.
Lines changed: 27 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,44 @@
11
package ws.codelogic.algorithms.sort;
22

3-
import ws.codelogic.algorithms.shuffle.Shuffler;
3+
public class QuickSort {
44

5-
public class QuickSort extends Sort{
5+
private static Comparable temp;
66

7-
private Comparable temp;
8-
9-
public QuickSort(Comparable[] array){
10-
this.array = array;
11-
}
12-
13-
@Override
14-
public void sort() {
15-
// Shuffler shuffler = new Shuffler();
16-
// array = shuffler.shuffle(array);
17-
//DEBUG
18-
for(Comparable c : array){
19-
System.out.println(c + ", ");
20-
}
21-
//DEBUG
22-
recursiveSort(0, array.length-1);
7+
public static void sort(Comparable[] a){
8+
sort(a, 0, a.length -1);
239
}
2410

25-
private void recursiveSort(int low, int high){
26-
int mid = partitioning(low, high);
27-
if(low < mid-1){
28-
recursiveSort(low, mid-1);
29-
}
30-
if(mid+1 < high){
31-
recursiveSort(mid + 1, high);
32-
}
11+
private static void sort(Comparable[] a, int lo, int hi){
12+
if(hi <= lo) return;
13+
int j = partition(a, lo, hi);
14+
sort(a, lo, j-1);
15+
sort(a, j+1, hi);
3316
}
3417

35-
public int partitioning(int low, int high){
36-
int pivot = low;
37-
high++;
18+
private static int partition(Comparable[] a, int lo, int hi){
19+
int i = lo, j = hi+1;
20+
while(true){
21+
while(less(a[++i], a[lo]))
22+
if(i == hi) break;
23+
while(less(a[lo], a[--j]))
24+
if(j == lo) break;
3825

39-
while(low<=high) {
40-
while (less(array[++low], array[pivot])) ;
41-
while (less(array[pivot], array[--high])) ;
42-
swap(low, high);
26+
if(i >= j) break;
27+
exch(a, i, j);
4328
}
44-
swap(pivot, high);
45-
return high;
29+
30+
exch(a, lo, j);
31+
return j;
4632
}
4733

48-
private void swap(int low, int high) {
49-
if(low<high){
50-
temp = array[low];
51-
array[low] = array[high];
52-
array[high] = temp;
53-
}
34+
private static boolean less(Comparable less, Comparable more){
35+
return less.compareTo(more) < 0;
5436
}
5537

56-
private boolean less(Comparable less, Comparable more){
57-
return less.compareTo(more) == -1;
38+
private static void exch(Comparable[] array, int first, int second){
39+
temp = array[first];
40+
array[first] = array[second];
41+
array[second] = temp;
5842
}
5943

6044
}

src/ws/codelogic/algorithms/sort/QuickSortTest.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,39 @@
66

77
public class QuickSortTest {
88

9-
private Sort quickSort;
10-
private Integer[] unsorted = {5,4,3,6,7,2,1,5,9};
11-
private Integer[] sorted = {1,2,3,4,5,5,6,7,9};
9+
private QuickSort quickSort;
1210

1311
@Before
1412
public void setup() {
15-
quickSort = new QuickSort(unsorted);
13+
quickSort = new QuickSort();
1614
}
1715

1816
@Test
1917
public void testSortedOrder() {
20-
quickSort.sort();
21-
assertEquals(unsorted, sorted);
18+
Integer[] unsorted = {9,8,4,3,6,7,2,1,5};
19+
Integer[] sorted = {1,2,3,4,5,6,7,8,9};
20+
test(unsorted, sorted);
21+
}
22+
23+
@Test
24+
public void testSortingWithDuplicates() {
25+
Integer[] unsorted = {9,8,4,3,6,7,2,1,5,4,6,7};
26+
Integer[] sorted = {1,2,3,4,4,5,6,6,7,7,8,9};
27+
test(unsorted, sorted);
28+
}
29+
30+
@Test
31+
public void testSortingEdgeCase1() {
32+
Integer[] unsorted = {1,6,5,4,8,9};
33+
Integer[] sorted = {1,4,5,6,8,9};
34+
test(unsorted, sorted);
35+
}
36+
37+
private void test(Integer[] unsorted, Integer[] sorted){
38+
quickSort.sort(unsorted);
39+
Integer[] newlySorted = unsorted;
40+
assertEquals(newlySorted, sorted);
2241
}
2342

2443
//TODO need to test for duplicate keys
25-
}
44+
}

0 commit comments

Comments
 (0)