跟着动画学Go数据结构之选择排序 #私藏项目实操分享#

简介: 跟着动画学Go数据结构之选择排序 #私藏项目实操分享#

选择排序

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

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

给定 N 个项目和 L = 0 的数组,选择排序将:

  1. 寻找序列中的最小值。在 [L ... N-1] 范围内找出最小项目 X 的位置,
  2. 用当前位置的值交换最小值。第 L 项交换X,
  3. 对所有元素重复上述过程,直到整个序列排序完成。将下限 L 增加1并重复步骤1直到 L = N-2。

伪代码:

void selectionSort(int a[], int N) {
  for (int L = 0; L <= N-2; ++L) { // O(N)
    int X = min_element(a+L, a+N) - a; // O(N)
    swap(a[X], a[L]); // O(1), X may be equal to L (no actual swap)
  }
}

动画演示

3.gif

Go 代码实现

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

总结

image.png

相关文章
|
1月前
|
存储 Go 容器
深入探究Go语言中的数据结构
深入探究Go语言中的数据结构
36 3
|
3月前
|
JSON 运维 Go
Go 项目配置文件的定义和读取
Go 项目配置文件的定义和读取
|
18天前
|
Go
使用go语言将A助手加入项目中
使用go语言将A助手加入项目中
20 2
|
25天前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
42 11
|
25天前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
14 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
29天前
|
存储 Kubernetes Go
Go语言项目组织架构
Go语言项目组织架构
|
3月前
|
API
企业项目迁移go-zero实战(二)
企业项目迁移go-zero实战(二)
|
3月前
|
Kubernetes API Go
企业项目迁移go-zero实战(一)
企业项目迁移go-zero实战(一)
|
3月前
|
存储 Prometheus 中间件
2020最佳人气项目之Go Web框架
2020最佳人气项目之Go Web框架
|
3月前
|
Java Go API
我用go-zero开发了第一个线上项目
我用go-zero开发了第一个线上项目