Untitled
user_0976868
plain_text
2 years ago
1.9 kB
5
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