一、案例目标
本案例将使用最经典的排序算法之一——冒泡排序(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中进行值交换与切片操作
冒泡排序虽然效率不高,但逻辑清晰,是理解“比较+交换”类排序算法的入门利器。
天牛宝配资-免费配资开户-杨方线上配资股票-网络平台配资提示:文章来自网络,不代表本站观点。