From 31c882dfcda0285ec0fa7df2fcddc824aa01a8ff Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Thu, 25 Jul 2024 12:06:39 +0200 Subject: [PATCH] =?UTF-8?q?go:=20add=20=C2=AB912.=20Sort=20an=20Array?= =?UTF-8?q?=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- go/sort-an-array.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 go/sort-an-array.go diff --git a/go/sort-an-array.go b/go/sort-an-array.go new file mode 100644 index 0000000..b418e91 --- /dev/null +++ b/go/sort-an-array.go @@ -0,0 +1,42 @@ +package main + +func sortArray(nums []int) []int { + swap := func(i, j int) { + nums[i], nums[j] = nums[j], nums[i] + } + + partition := func(lower, upper int) (int, int) { + pivot := nums[(lower+upper)/2] + + lt, eq, gt := lower, lower, upper + + for eq <= gt { + if nums[eq] < pivot { + swap(eq, lt) + lt++ + eq++ + } else if nums[eq] > pivot { + swap(eq, gt) + gt-- + } else { + eq++ + } + } + + return lt, gt + } + + var quicksort func(int, int) + quicksort = func(lower, upper int) { + if lower >= upper || lower < 0 || upper < 0 { + return + } + + lt, gt := partition(lower, upper) + quicksort(lower, lt-1) + quicksort(gt+1, upper) + } + + quicksort(0, len(nums)-1) + return nums +}