Go语言数据结构之选择排序示例详解
作者:宇宙之一粟 时间:2024-04-26 17:25:33
选择排序
选择排序(selection sort)是一种原地(in-place)排序算法,适用于数据量较少的情况。由于选择操作是基于键值的且交换操作只在需要时才执行,所以选择排序长用于数值较大和键值较小的文件。
思想:
对一个数组进行排序,从未排序的部分反复找到最小的元素,并将其放在开头。
给定长度为 nnn 的序列和位置索引i=0 的数组,选择排序将:
遍历一遍序列,寻找序列中的最小值。在 [i...n−1] 范围内找出最小值
minValue
的位置minIndex
,用当前位置的值交换最小值。第 i 项的值与交换 minIndex 的值交换,
swap(nums[i],nums[minIndex])
对所有元素重复上述过程,直到整个序列排序完成。将下限 iii 增加1,并重复步骤 1 直到 i=n−2。
伪代码:
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 代码实现
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
标签:Go,数据结构,选择排序
0
投稿
猜你喜欢
SQL的substring_index()用法实例(MySQL字符串截取)
2024-01-27 19:30:19
pyqt5打包成exe可执行文件的方法
2022-02-09 11:25:57
使用Keras预训练好的模型进行目标类别预测详解
2023-02-04 09:14:37
异地远程访问本地SQL Server数据库
2024-01-18 20:00:18
sql server 视图作用
2009-01-05 13:53:00
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2021-06-12 15:16:02
Python爬取腾讯视频评论的思路详解
2021-05-30 23:04:43
Python中np.random.randint()参数详解及用法实例
2022-04-17 19:40:48
详解Vue用自定义指令完成一个下拉菜单(select组件)
2024-05-09 15:19:06
PyTorch中clone()、detach()及相关扩展详解
2022-06-29 17:50:34
MySQL数据库只监听某个特定地址的方法
2008-12-05 16:11:00
pytest实现测试用例参数化
2023-12-10 19:01:21
Python列表对象实现原理详解
2022-09-07 10:24:58
vue实现全屏滚动效果(非fullpage.js)
2024-05-28 15:46:00
总结python爬虫抓站的实用技巧
2022-07-07 05:04:09
django项目环境搭建及在虚拟机本地创建django项目的教程
2022-10-14 14:04:32
Mysql InnoDB删除数据后释放磁盘空间的方法
2024-01-21 00:36:49
python单例模式之selenium driver实现单例
2021-09-30 14:31:03
Spark GraphX 分布式图处理框架图算法详解
2022-11-01 14:01:40
Python实现对中文文本分段分句
2022-09-16 18:16:50