2
1
Fork 0

concurrency

main
Sebastian Steger 2025-08-20 11:33:21 +00:00
parent 4632c0c479
commit 2d1eec66ea
3 changed files with 122 additions and 0 deletions

View File

@ -0,0 +1,17 @@
package main
func print(ci <-chan int) {
//TODO: implement
}
func main() {
c := make(chan int)
c <- 1
c <- 2
c <- 3
close(c)
print(c)
}

View File

@ -0,0 +1,86 @@
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")
}

View File

@ -0,0 +1,19 @@
package main
import (
"math/rand"
"time"
)
func main() {
ch1 := make(chan string)
go func() {
time.Sleep(time.Duration(rand.Intn(5)+1) * time.Second)
ch1 <- "Message from channel 1"
}()
msg1 := <-ch1
println("Received:", msg1)
}