Golang
主页 > 脚本 > Golang >

Go语言数据结构之选择排序示例

2022-08-27 | 佚名 | 点击:

选择排序

选择排序(selection sort)是一种原地(in-place)排序算法,适用于数据量较少的情况。由于选择操作是基于键值的且交换操作只在需要时才执行,所以选择排序长用于数值较大和键值较小的文件。

思想:

对一个数组进行排序,从未排序的部分反复找到最小的元素,并将其放在开头。

给定长度为 nnn 的序列和位置索引i=0 的数组,选择排序将:

伪代码:

1

2

3

4

5

6

func selectionSort(nums []int, length int) {

  for i := 0; i < length-1; i++ { // O(N)

    minValue = nums[minIdx] // O(N)

    swap(nums[i], nums[minIndex]); // O(1), X may be equal to L (no actual swap)

  }

}

动画演示

Go 代码实现

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

package main

import "fmt"

func main() {

  unsorted := []int{40, 13, 20, 8, 12, 10, 27}

  length := len(unsorted)

  selectionSort(unsorted, length)

  for i := 0; i < length; i++ {

    fmt.Printf("%d\t", unsorted[i])

  }

}

func selectionSort(nums []int, length int) {

  var minIdx int // 被选择的最小的值的位置

  for i := 0; i < length-1; i++ {

    minIdx = i

    // 每次循环的第一个元素为最小值保存

    var minValue = nums[minIdx]

    for j := i; j < length-1; j++ {

      if minValue > nums[j+1] {

        minValue = nums[j+1]

        minIdx = j + 1

      }

    }

    // 如果最小值的位置改变,将当前的最小值位置保存

    if i != minIdx {

      var temp = nums[i]

      nums[i] = nums[minIdx]

      nums[minIdx] = temp

    }

  }

}

运行结果为:

[Running] go run "e:\Coding Workspaces\LearningGoTheEasiestWay\Go 数据结构\选择排序\main.go"\
8 10 12 13 20 27 40

总结

选择排序的优点:

缺点:

稳定性:

原文链接:https://juejin.cn/post/7042671726114635812
相关文章
最新更新