33 lines
521 B
Go
33 lines
521 B
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
// Interval [L, R]
|
|
func reverse(arr *[]int, L, R int) {
|
|
for L < R {
|
|
(*arr)[L], (*arr)[R] = (*arr)[R], (*arr)[L]
|
|
L++
|
|
R--
|
|
}
|
|
}
|
|
|
|
func pancakeSort(arr []int) (ret []int) {
|
|
n := len(arr)
|
|
for i := n; i > 0; i-- {
|
|
maxVal, maxPos := -1, -1
|
|
for j := 0; j < i; j++ {
|
|
if arr[j] > maxVal {
|
|
maxVal, maxPos = arr[j], j
|
|
}
|
|
}
|
|
ret = append(ret, maxPos+1, i)
|
|
reverse(&arr, 0, maxPos)
|
|
reverse(&arr, 0, i-1)
|
|
}
|
|
return
|
|
}
|
|
|
|
func main() {
|
|
fmt.Println(pancakeSort([]int{3, 2, 4, 1}))
|
|
}
|