提兵百万西湖上,立马吴山第一峰!这篇文章主要讲述跟着动画学Go数据结构之选择排序 #私藏项目实操分享#相关的知识,希望能为你提供帮助。
选择排序
选择排序(selection
sort)是一种原地(in-place)排序算法,适用于数据量较少的情况。由于选择操作是基于键值的且交换操作只在需要时才执行,所以选择排序长用于数值较大和键值较小的文件。
思想:对一个数组进行排序,从未排序的部分反复找到最小的元素,并将其放在开头。
给定 N 个项目和 L = 0 的数组,选择排序将:
- 寻找序列中的最小值。在 [L ... N-1] 范围内找出最小项目 X 的位置,
- 用当前位置的值交换最小值。第 L 项交换X,
- 对所有元素重复上述过程,直到整个序列排序完成。将下限 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)
动画演示
【跟着动画学Go数据结构之选择排序 #私藏项目实操分享#】
Go 代码实现
package main
import "fmt"
func main()
unsorted := []int40, 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 = https://www.songbingjia.com/android/nums[minIdx]
for j := i; j < length-1; j++
if minValue > nums[j+1]
minValue = https://www.songbingjia.com/android/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 101213202740
总结
选择排序的优点:
- 易于实现,原地排序(不需要额外的存储空间)
推荐阅读
- 异常剖析 - netstat查看进程时不显示进程名pid 显示"-" #yyds干货盘点#
- #yyds干货盘点#Spring认证中国教育管理中心-Apache Geode 的 Spring 数据教程一
- Linux之cp命令
- Shell脚本--循环(forwhileuntil)
- #yyds干货盘点#Git版本回退的方式
- 万字教你如何用 Python 实现线性规划
- #yyds干货盘点#echarts中点击legend高亮对应的图
- Python | Python语法基础 #yyds干货盘点#
- K8SNamespace命名空间