Last active
October 26, 2022 12:41
-
-
Save denkspuren/370a69f51ab2cc1ad7e3f14baa50510c to your computer and use it in GitHub Desktop.
Quicksort, in place sorting with an array
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Quicksort, in place sorting -- according to | |
// https://www.youtube.com/watch?v=MZaf_9IZCrc | |
void swap(int[] numbers, int i, int j) { | |
int tmp = numbers[i]; | |
numbers[i] = numbers[j]; | |
numbers[j] = tmp; | |
} | |
void shift(int[] numbers, int from, int to) { | |
int tmp = numbers[to]; | |
for (int i = to - 1; i >= from; i--) | |
numbers[i + 1] = numbers[i]; | |
numbers[from] = tmp; | |
} | |
void qs(int[] numbers, int first, int last) { | |
if (first >= last) return; | |
int i = first - 1; | |
for (int j = first; j < last; j++) { | |
if (numbers[j] < numbers[last]) { | |
i = i + 1; | |
swap(numbers, i, j); | |
} | |
} | |
shift(numbers, i + 1, last); | |
qs(numbers, first, i); | |
qs(numbers, i + 2, last); | |
} | |
int[] quicksort(int[] numbers) { | |
qs(numbers, 0, numbers.length - 1); | |
return numbers; | |
} | |
// Beispielanwendung: | |
// | |
// jshell> quicksort(new int[]{7, 2, 1, 8, 6, 3, 5, 4}) | |
// $9 ==> int[8] { 1, 2, 3, 4, 5, 6, 7, 8 } | |
// Testing | |
AssertionError ae; | |
try { assert false; } | |
catch (AssertionError exception) { ae = exception; } | |
if (ae == null) System.out.println("WARNING: Turn assertions on, call \"jshell -R-ea\""); | |
int[] numbers = new int[]{}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{}); | |
numbers = new int[]{7}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{7}); | |
numbers = new int[]{1, 1}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{1, 1}); | |
numbers = new int[]{1, 2}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{1, 2}); | |
numbers = new int[]{2, 1}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{1, 2}); | |
numbers = new int[]{1, 2, 3}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{1, 2, 3}); | |
numbers = new int[]{1, 3, 2}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{1, 2, 3}); | |
numbers = new int[]{2, 1, 3}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{1, 2, 3}); | |
numbers = new int[]{2, 3, 1}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{1, 2, 3}); | |
numbers = new int[]{3, 1, 2}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{1, 2, 3}); | |
numbers = new int[]{3, 2, 1}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{1, 2, 3}); | |
numbers = new int[]{3, 3, 1}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{1, 3, 3}); | |
numbers = new int[]{1, 3, 3}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{1, 3, 3}); | |
numbers = new int[]{3, 3, 1}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{1, 3, 3}); | |
numbers = new int[]{5, 3, 3}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{3, 3, 5}); | |
numbers = new int[]{3, 3, 5}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{3, 3, 5}); | |
numbers = new int[]{3, 3, 3}; | |
qs(numbers, 0, numbers.length - 1); | |
assert Arrays.equals(numbers, new int[]{3, 3, 3}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment