Skip to content

Commit 2d7858d

Browse files
committed
Add Quick Sort algorithm implementation
1 parent 18b8a07 commit 2d7858d

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.anverbogatov.algorithms.sorting;
2+
3+
public class QuickSort {
4+
/**
5+
* Sort given array of numbers using Quick Sort algorithm.
6+
* The algorithm has complexity equals O(n * log n).
7+
*
8+
* @param numbers - array of numbers that need to be sorted
9+
*/
10+
public static void sort(int[] numbers) {
11+
if (numbers.length < 2) return;
12+
sort(numbers, 0, numbers.length - 1);
13+
}
14+
15+
private static void sort(int[] numbers, int low, int high) {
16+
if (high <= low) return;
17+
var pivot = partition(numbers, low, high);
18+
sort(numbers, low, pivot - 1);
19+
sort(numbers, pivot + 1, high);
20+
}
21+
22+
private static int partition(int[] numbers, int low, int high) {
23+
var i = low;
24+
var j = high + 1;
25+
var pivotEl = numbers[low];
26+
while (true) {
27+
while (numbers[++i] < pivotEl) if (i == high) break;
28+
while (pivotEl < numbers[--j]) if (j == low) break;
29+
if (i >= j) break;
30+
swap(numbers, i, j);
31+
}
32+
swap(numbers, low, j);
33+
return j;
34+
}
35+
36+
private static void swap(int[] numbers, int i, int j) {
37+
var temp = numbers[i];
38+
numbers[i] = numbers[j];
39+
numbers[j] = temp;
40+
}
41+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.anverbogatov.algorithms.sorting;
2+
3+
import org.junit.Test;
4+
5+
import java.util.Arrays;
6+
7+
import static org.junit.Assert.assertArrayEquals;
8+
9+
public class QuickSortTest {
10+
@Test
11+
public void sortEmpty() {
12+
// given
13+
var numbers = new int[]{};
14+
// when
15+
QuickSort.sort(numbers);
16+
// then
17+
assertArrayEquals(new int[]{}, numbers);
18+
}
19+
20+
@Test
21+
public void sortSingle() {
22+
// given
23+
var numbers = new int[]{1};
24+
// when
25+
QuickSort.sort(numbers);
26+
// then
27+
assertArrayEquals(new int[]{1}, numbers);
28+
}
29+
30+
@Test
31+
public void sort() {
32+
// given
33+
var numbers = new int[]{10, 15, 3, 7, 9, 2, 4, 5};
34+
// when
35+
QuickSort.sort(numbers);
36+
// then
37+
System.out.println("[Quick sort]: = " + Arrays.toString(numbers));
38+
assertArrayEquals(new int[]{2, 3, 4, 5, 7, 9, 10, 15}, numbers);
39+
}
40+
}

0 commit comments

Comments
 (0)