From 927d03dddd324909742d57384e4d02a099ae7201 Mon Sep 17 00:00:00 2001 From: cubixle Date: Thu, 22 Feb 2024 20:41:15 +0000 Subject: [PATCH] finish sorted queue --- sorted_queue/main.go | 31 +++++++++++++++++++++++-------- sorted_queue/main_test.go | 11 +++++++---- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/sorted_queue/main.go b/sorted_queue/main.go index 02c41ae..2fdfc4e 100644 --- a/sorted_queue/main.go +++ b/sorted_queue/main.go @@ -1,6 +1,9 @@ package queue -import "sync" +import ( + "log" + "sync" +) type Item struct { ID string @@ -36,16 +39,22 @@ func (q *queue) Put(r *Item) bool { q.queue = append(q.queue, r) - if len(q.queue) > 0 { - // sort the queue - for i := len(q.queue); i > 0; i-- { - if q.queue[i].Priority > q.queue[i-1].Priority { - q.queue[i] = q.queue[i-1] - q.queue[i-1] = q.queue[i] - } + qu := q.queue + i := 1 + for i < len(qu) { + j := i + for j >= 1 && qu[j].Priority > qu[j-1].Priority { + tmp := qu[j-1] + qu[j-1] = qu[j] + qu[j] = tmp + + j-- } + i++ } + q.queue = qu + return true } @@ -67,3 +76,9 @@ func (q *queue) GetNext() *Item { return r } + +func (q *queue) Display() { + for _, i := range q.queue { + log.Println(i) + } +} diff --git a/sorted_queue/main_test.go b/sorted_queue/main_test.go index ec0dce1..0d552b4 100644 --- a/sorted_queue/main_test.go +++ b/sorted_queue/main_test.go @@ -18,15 +18,18 @@ func TestQueue(t *testing.T) { t.Fatal("didn't get a item") } if v.ID != "bbb" { - t.Fatal("id wasn't what we expected") + t.Fatalf("id wasn't what we expected bbb, got %s", v.ID) } + v = q.GetNext() if v.ID != "aaa" { - t.Fatal("id wasn't what we expected") + t.Fatalf("id wasn't what we expected aaa, got %s", v.ID) } + v = q.GetNext() if v.ID != "ccc" { - t.Fatal("id wasn't what we expected") + t.Fatalf("id wasn't what we expected ccc, got %s", v.ID) } + v = q.GetNext() if v.ID != "ddd" { - t.Fatal("id wasn't what we expected") + t.Fatalf("id wasn't what we expected ddd, got %s", v.ID) } }