From d30a8c82da5e30f0f25296f7f5936a5b2cda8ee3 Mon Sep 17 00:00:00 2001 From: Wouter Groeneveld Date: Mon, 9 Apr 2018 15:49:34 +0200 Subject: [PATCH] http://www.brainbaking.com/post/pseudocode/ --- .../java/src/be/brainbaking/lists/Lists.java | 4 ++++ .../be/brainbaking/lists/ListsWrapper.java | 22 +++++++++++++++++++ .../src/be/brainbaking/sorting/QuickSort.java | 5 +++-- 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 sorting/java/src/be/brainbaking/lists/ListsWrapper.java diff --git a/sorting/java/src/be/brainbaking/lists/Lists.java b/sorting/java/src/be/brainbaking/lists/Lists.java index 4ec0c96..4f30384 100644 --- a/sorting/java/src/be/brainbaking/lists/Lists.java +++ b/sorting/java/src/be/brainbaking/lists/Lists.java @@ -5,6 +5,10 @@ import java.util.stream.Collectors; public class Lists { + public static ListsWrapper exchange(int oneBasedA) { + return new ListsWrapper(oneBasedA); + } + public static void swap(List list, int oneBasedA, int oneBasedB) { int temp = list.get(oneBasedA - 1); list.set(oneBasedA - 1, list.get(oneBasedB - 1)); diff --git a/sorting/java/src/be/brainbaking/lists/ListsWrapper.java b/sorting/java/src/be/brainbaking/lists/ListsWrapper.java new file mode 100644 index 0000000..1f75b57 --- /dev/null +++ b/sorting/java/src/be/brainbaking/lists/ListsWrapper.java @@ -0,0 +1,22 @@ +package be.brainbaking.lists; + +import java.util.List; + +public class ListsWrapper { + + private final int oneBasedA; + private int oneBasedB; + + public ListsWrapper with(int oneBasedB) { + this.oneBasedB = oneBasedB; + return this; + } + + public void in(List list) { + Lists.swap(list, oneBasedA, oneBasedB); + } + + public ListsWrapper(int oneBasedA) { + this.oneBasedA = oneBasedA; + } +} diff --git a/sorting/java/src/be/brainbaking/sorting/QuickSort.java b/sorting/java/src/be/brainbaking/sorting/QuickSort.java index 9a81d1a..2870ad4 100644 --- a/sorting/java/src/be/brainbaking/sorting/QuickSort.java +++ b/sorting/java/src/be/brainbaking/sorting/QuickSort.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.List; import static be.brainbaking.lists.Lists.asString; +import static be.brainbaking.lists.Lists.exchange; public class QuickSort implements Sortable { @@ -68,11 +69,11 @@ public class QuickSort implements Sortable { for(int j = oneBasedStartIndex; j <= oneBasedEndIndex - 1; j++) { if(list.get(j - 1) <= x) { i++; - Lists.swap(list, i, j); + exchange(i).with(j).in(list); } } - Lists.swap(list, i + 1, oneBasedEndIndex); + exchange(i + 1).with(oneBasedEndIndex).in(list); System.out.println("partitioned: " + asString(list)); return i + 1; }