九游游戏官方客服

你的位置:九游游戏官方客服 > 新闻动态 > Go语言数组排序(冒泡排序法)—— 用最直观的方式掌握排序算法
Go语言数组排序(冒泡排序法)—— 用最直观的方式掌握排序算法
发布日期:2025-07-20 04:39    点击次数:63

一、案例目标

本案例将使用最经典的排序算法之一——冒泡排序(BubbleSort),对一组整数进行从小到大的排序。通过本案例,掌握基本排序思维与切片操作,为后续掌握更复杂的排序算法打基础。

二、应用场景举例

•排序成绩、价格、分数等数据

•理解常见算法执行原理

•后续学习快速排序、归并排序、堆排序的基础

三、涉及知识点讲解

知识点

说明

切片[]intGo中常用的动态数组

冒泡排序原理相邻元素两两比较,大的往后交换

双层for循环控制轮次与元素比较

四、实现需求

1.用户输入一组整数(用空格分隔);

2.程序将这些数字进行冒泡排序;

3.输出排序前与排序后的数组;

4.包含基础的错误处理(输入不规范);

五、完整代码实现packagemainimport("bufio""fmt""os""strconv""strings")funcmain{fmt.Println("请输入一组整数(用空格分隔):")reader:=bufio.NewReader(os.Stdin)input,_:=reader.ReadString(' ')//字符串转整数切片nums,err:=parseInput(input)iferr!=nil{fmt.Println("输入有误,请只输入整数!")return}fmt.Println("排序前:",nums)bubbleSort(nums)fmt.Println("排序后:",nums)}//冒泡排序核心逻辑funcbubbleSort(arr[]int){n:=len(arr)fori:=0;i-1;i++{//提前结束标志位swapped:=falseforj:=0;j-1;j++{ifarr[j]>arr[j+1]{//交换arr[j],arr[j+1]=arr[j+1],arr[j]swapped=true}}//若没有发生交换,说明已经有序if!swapped{break}}}//将输入字符串转为整数切片funcparseInput(inputstring)([]int,error){fields:=strings.Fields(input)varnums[]intfor_,f:=rangefields{n,err:=strconv.Atoi(f)iferr!=nil{returnnil,err}nums=append(nums,n)}returnnums,nil}

六、运行示例示例输入:请输入一组整数(用空格分隔):93518输出结果:排序前:[93518]排序后:[13589]

七、核心算法解释

冒泡排序的基本思路是:

•每次遍历将当前最大值“冒泡”到末尾

•每轮比较的次数逐渐减少

•若一轮中未发生交换,则提前结束(优化点)

图示演示:

初始:[93518]第一轮:[35189]第二轮:[31589]第三轮:[13589]第四轮:无交换,提前退出

八、拓展练习建议

1.实现从大到小排序;

2.改为选择排序、插入排序;

3.排序对象为字符串数组;

4.改写为支持浮点数排序;

5.统计交换次数与比较次数;

九、常见错误提示

错误描述

说明

忘记冒泡排序的循环条件会导致数组越界或逻辑出错

不使用交换变量,直接赋值arr[i]=arr[j]会破坏原数据

输入非整数strconv.Atoi会返回错误,需处理

小结

通过本案例你掌握了:

•如何接收用户一组数据输入

•如何将字符串解析为整数切片

•如何使用冒泡排序对数组进行排序

•如何在Go中进行值交换与切片操作

冒泡排序虽然效率不高,但逻辑清晰,是理解“比较+交换”类排序算法的入门利器。