Skip to content

Instantly share code, notes, and snippets.

@adampolar
Created January 29, 2019 20:06
Show Gist options
  • Select an option

  • Save adampolar/fe4a36757e08e1171d02be62fa3dfbf5 to your computer and use it in GitHub Desktop.

Select an option

Save adampolar/fe4a36757e08e1171d02be62fa3dfbf5 to your computer and use it in GitHub Desktop.
Three way partition
package main
func threeWayPartitionAlgo(ints []int) {
intsFromLeft := 0
intsFromRight := len(ints) - 1
initial := ints[0]
cmpIndex := intsFromLeft + 1
vacations := 0
for intsFromLeft != intsFromRight-vacations {
if ints[cmpIndex] < initial {
ints[intsFromLeft], cmpIndex = ints[cmpIndex], cmpIndex+1
intsFromLeft++
continue
}
if ints[cmpIndex] > initial {
ints[intsFromRight], ints[cmpIndex] = ints[cmpIndex], ints[intsFromRight]
intsFromRight--
continue
}
if ints[cmpIndex] == initial {
cmpIndex = cmpIndex + 1
vacations++
continue
}
}
for i := intsFromLeft; i <= intsFromRight; i++ {
ints[i] = initial
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment