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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy