Go编写调度算法FCFS和SJF

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")
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值