package main
import (
"fmt"
"time"
)
var (
A []BTNode
n int //任务个数
a, b int
s []int
visited []bool
)
type BTNode struct { //定义结构体
Time int
Length int
}
func Init() bool { //初始化切片
s = make([]int, n)
visited = make([]bool, n)
visited[0] = true
for i := 0; i < n; i++ {
fmt.Scanln(&a, &b)
v := BTNode{a, b}
A = append(A, v)
}
return true
}
func FCFS() (int, float32) { //先来先服务
sum := A[0].Time
var sum_t float32 = 0.0
for i := 0; i < n; i++ {
sum = sum + A[i].Length
s[i] = sum - A[i].Time
sum_t = sum_t + float32(s[i])/float32(A[i].Length)
}
return sum, sum_t / float32(n)
}
func Min() (int, int) {
min := 9999 //定义一个比较大的数
var index int = 0
for i := 0; i < n; i++ {
if visited[i] == false {
if min > A[i].Length {
index = i
min = A[i].Length
}
}
}
visited[index] = true //设置为访问过
return index, min
}
func SJF() (int, float32) { //短作业优先
sum := A[0].Time + A[0].Length
var sum_t float32 = 1
var temp int = 0
var index int = 0
for i := 1; i < n; i++ {
index, temp = Min()
sum = sum + temp
s[index] = sum - A[index].Time
sum_t = sum_t + float32(s[index])/float32(temp)
}
return sum, sum_t / float32(n)
}
func main() {
var total_time int
var average_time float32
fmt.Println("请输入任务的个数:")
fmt.Scanln(&n)
fmt.Println("请输入每个任务的起始时间和执行时间")
if Init() {
t1 := time.Now()
//
total_time, average_time = FCFS()
fmt.Println("FCFS总时间是:", total_time)
fmt.Println("FCFS平均周转时间是:", average_time)
total_time, average_time = SJF()
fmt.Println("SJF总时间是:", total_time)
fmt.Println("SJF平均周转时间是:", average_time)
//
elapsed := time.Since(t1)
fmt.Println("运行时间: ", elapsed)
} else {
fmt.Println("你输入的数据存在错误\a")
}
}
Go编写调度算法FCFS和SJF
最新推荐文章于 2024-01-02 10:32:14 发布