package main import ( "fmt" "math/rand" "sort" "time" ) func mergeSortSequential(data []float64) { if len(data) <= 1 { return } mid := len(data) / 2 left := data[:mid] right := data[mid:] mergeSortSequential(left) mergeSortSequential(right) copy(data, merge(left, right)) } func merge(left, right []float64) []float64 { result := make([]float64, 0, len(left)+len(right)) i, j := 0, 0 for i < len(left) && j < len(right) { if left[i] < right[j] { result = append(result, left[i]) i++ } else { result = append(result, right[j]) j++ } } result = append(result, left[i:]...) result = append(result, right[j:]...) return result } func main() { //1. DATA CREATION data := make([]float64, 1000*1000*20) for i := range data { data[i] = rand.Float64() * 100 // Random floats between 0 and 100 } expected := make([]float64, len(data)) copy(expected, data) sort.Float64s(expected) //2. SORTING start := time.Now() mergeSortSequential(data) elapsed := time.Since(start) fmt.Printf("MergeSort took %s\n", elapsed) //3. VERIFICATION if sort.Float64sAreSorted(data) { fmt.Println("Data is sorted correctly") } else { fmt.Println("Data is NOT sorted correctly") } if len(data) != len(expected) { fmt.Println("Data and expected slices have different lengths") return } for i := range data { if data[i] != expected[i] { fmt.Println("Data and expected slices do not match") return } } fmt.Println("Data and expected slices match") }