Go語言程式:按姓名排序員工


在某些情況下,您可能需要一個員工列表,並需要根據他們的姓名首字母以特定順序顯示他們。在這篇 Go 語言文章中,我們將使用氣泡排序、插入排序以及 Go 的排序包來對員工姓名進行排序。

演算法

  • 在 Employee 結構體中建立一個名為“Name”的欄位。

  • 將 Employee 物件陣列作為“BubbleSortByEmployeeName”方法的輸入。

  • 獲取員工陣列的長度並將其儲存在變數 n 中。

  • 從 i = 0 到 n-1 開始外迴圈,從 j = 0 到 n-i-1 開始內迴圈。

  • 將 employees[j].Name 與 employees[j+1].Name 進行比較。

  • 函式“BubbleSortByEmployeeName”返回。

  • 在 main 方法中建立一個名為 employees 的 Employee 物件陣列。

  • 透過遍歷 employees 陣列列印所有員工的姓名。

  • 使用 employees 陣列作為使用 BubbleSortByEmployeeName 方法時的引數。

  • 透過遍歷 employees 陣列列印所有員工的姓名。

示例 1:氣泡排序

氣泡排序是一種簡單的演算法,它比較相鄰的字母,如果它們順序錯誤則交換它們。

package main
import "fmt"

type Employee struct {
   Name string
}

func BubbleSortByEmployeeName(employees []Employee) {
   n := len(employees)
   for i := 0; i < n-1; i++ {
      for j := 0; j < n-i-1; j++ {
         if employees[j].Name > employees[j+1].Name {
            employees[j], employees[j+1] = employees[j+1], employees[j]
         }
      }
   }
}

func main() {
   employees := []Employee{
      {Name: "Nitin"},
      {Name: "Akshay"},
      {Name: "Sahil"},
      {Name: "Akhil"},
   }

   fmt.Println("Before sorting:")
   for _, employee := range employees {
      fmt.Println(employee.Name)
   }

   BubbleSortByEmployeeName(employees)

   fmt.Println("\nAfter sorting:")
   for _, employee := range employees {
      fmt.Println(employee.Name)
   }
}

輸出

Before sorting:
Nitin 
Akshay 
Sahil
Akhil 

After sorting: 
Akhil 
Akshay 
Nitin 
Sahil

示例 2:插入排序

插入排序也是一種簡單的排序演算法,它透過一次使用一個專案來構建最終的排序陣列。它的工作原理是將一個元素從未排序的部分插入到排序陣列中的正確位置。

package main
import "fmt"

type Employee struct {
   Name string
}

func InsertionSortByEmployeeName(employees []Employee) {
   n := len(employees)
   for i := 1; i < n; i++ {
      key := employees[i]
      j := i - 1
      for j >= 0 && employees[j].Name > key.Name {
         employees[j+1] = employees[j]
         j--
      }
      employees[j+1] = key
   }
}

func main() {
   employees := []Employee{
      {Name: "Krishan"},
      {Name: "Ram"},
      {Name: "Seeta"},
      {Name: "Radha"},
   }

   fmt.Println("Before sorting:")
   for _, employee := range employees {
      fmt.Println(employee.Name)
   }

   InsertionSortByEmployeeName(employees)

   fmt.Println("\nAfter sorting:")
   for _, employee := range employees {
      fmt.Println(employee.Name)
   }
}

程式碼

Before sorting: 
Krishan 
Ram 
Seeta 
Radha 

After sorting: 
Krishan 
Radha 
Ram 
Seeta

示例 3:使用 Go 排序包

Sort.sort() 是一個內建的 Go 語言函式,支援多種排序演算法和介面。它提供了一種更有效、更靈活的資料結構排序方法。

package main

import (
   "fmt"
   "sort"
)

type Employee struct {
   Name string
}

type EmployeeSortByName []Employee

func (e EmployeeSortByName) Len() int {
   return len(e)
}

func (e EmployeeSortByName) Less(i, j int) bool {
   return e[i].Name < e[j].Name
}

func (e EmployeeSortByName) Swap(i, j int) {
   e[i], e[j] = e[j], e[i]
}

func main() {
   employees := []Employee{
      {Name: "Krishan"},
      {Name: "Ram"},
      {Name: "Radha"},
      {Name: "Seeta"},
   }

   fmt.Println("Before sorting:")
   for _, employee := range employees {
      fmt.Println(employee.Name)
   }

   sort.Sort(EmployeeSortByName(employees))

   fmt.Println("\nAfter sorting:")
   for _, employee := range employees {
      fmt.Println(employee.Name)
   }
}

輸出

Before sorting: 
Krishan 
Ram 
Radha 
Seeta 

After sorting: 
Krishan 
Radha 
Ram 
Seeta

結論

在本文中,我們研究了三種不同的方法來根據 Go 中員工的姓名對一組 Employee 物件進行排序。雖然氣泡排序和插入排序演算法的實現很簡單,但對於大型資料集來說,它們可能不是最有效的。相比之下,Go 的排序包透過使用各種排序演算法提供了更可靠、更有效的解決方案。

更新於: 2023年7月6日

138 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告