package main import ( "bufio" "fmt" "os" "strconv" "strings" "sync" ) func Swap(sli []int, i int) { sli[i], sli[i+1] = sli[i+1], sli[i] } func BubbleSort(sli []int, wg *sync.WaitGroup) { fmt.Println(sli) swapped := true for limit := len(sli) - 1; limit > 0 && swapped == true; limit-- { swapped = false for i := 0; i < limit; i++ { if sli[i] > sli[i+1] { Swap(sli, i) swapped = true } } } wg.Done() } func Merge(sli1, sli2 []int) []int { sorted := make([]int, 0, len(sli1)+len(sli2)) i, j := 0, 0 for i < len(sli1) && j < len(sli2) { if sli1[i] < sli2[j] { sorted = append(sorted, sli1[i]) i++ } else { sorted = append(sorted, sli2[j]) j++ } } if i < len(sli1) { sorted = append(sorted, sli1[i:]...) } else { sorted = append(sorted, sli2[j:]...) } return sorted } func main() { var seq []int OuterLoop: for seq == nil { scanner := bufio.NewScanner(os.Stdin) fmt.Println( "Type in a sequence of space-separated integers:", ) scanner.Scan() input := strings.Fields(scanner.Text()) for _, value := range input { num, err := strconv.Atoi(value) if err != nil { fmt.Printf("Invalid input: %q\n", value) continue OuterLoop } else { seq = append(seq, num) } } } a := seq[:len(seq)/2] b := seq[len(seq)/2:] a1 := a[:len(a)/2] a2 := a[len(a)/2:] b1 := b[:len(b)/2] b2 := b[len(b)/2:] var wg sync.WaitGroup wg.Add(4) go BubbleSort(a1, &wg) go BubbleSort(a2, &wg) go BubbleSort(b1, &wg) go BubbleSort(b2, &wg) wg.Wait() a = Merge(a1, a2) b = Merge(b1, b2) fmt.Println(strings.Trim(fmt.Sprint(Merge(a, b)), "[]")) }