forked from steger/pr3-ws202526
concurrency
parent
56df449103
commit
d18bb40ec8
|
|
@ -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)
|
||||
}
|
||||
|
|
@ -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")
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
Loading…
Reference in New Issue