Untitled
user_0976868
plain_text
2 years ago
1.9 kB
8
Indexable
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func ReadInt(sc *bufio.Scanner) int {
var nums []string
if sc.Scan() {
nums = strings.Fields(sc.Text())
}
num, _ := strconv.Atoi(nums[0])
return num
}
func WriteString(w *bufio.Writer, str string, end string) {
w.WriteString(str)
w.WriteString(end)
}
func WriteArrString(w *bufio.Writer, arr []string, sep, end string) {
for i, elem := range arr {
w.WriteString(elem)
if i == len(arr)-1 {
w.WriteString(end)
} else {
w.WriteString(sep)
}
}
if len(arr) == 0 {
w.WriteString("\n")
}
}
func mainE() {
sc := bufio.NewScanner(os.Stdin)
sc.Buffer(make([]byte, 10000000), 1000000)
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
n := ReadInt(sc)
arr := make([]string, n)
for i := 0; i < n; i++ {
sc.Scan()
arr[i] = sc.Text()
}
WriteString(w, "Initial array:", "\n")
WriteArrString(w, arr, ", ", "\n")
maxLen := len(arr[0])
for i := 1; i < n; i++ {
if len(arr[i]) > maxLen {
maxLen = len(arr[i])
}
}
buckets := make([][]string, 10)
for i := 0; i < maxLen; i++ {
WriteString(w, "**********", "\n")
WriteString(w, fmt.Sprintf("Phase %d\n", i+1), "")
for j := 0; j < 10; j++ {
buckets[j] = make([]string, 0)
}
for j := 0; j < n; j++ {
num, _ := strconv.Atoi(string(arr[j][len(arr[j])-i-1]))
buckets[num] = append(buckets[num], arr[j])
}
for j := 0; j < 10; j++ {
WriteString(w, fmt.Sprintf("Bucket %d: ", j), "")
if len(buckets[j]) == 0 {
WriteString(w, "empty", "\n")
} else {
WriteArrString(w, buckets[j], ", ", "\n")
}
}
index := 0
for j := 0; j < 10; j++ {
for k := 0; k < len(buckets[j]); k++ {
arr[index] = buckets[j][k]
index++
}
}
}
WriteString(w, "**********", "\n")
WriteString(w, "Sorted array:", "\n")
WriteArrString(w, arr, ", ", "\n")
}
Editor is loading...
Leave a Comment