在go语言中使用一个循环对数组进行排序示例代码
Go  /  管理员 发布于 1年前   414
排序是程序员之间常见的事情,也是最常用的,所以今天我们将介绍如何使用左右指针在一个循环中对数组进行排序,在获取每个值后,我们开始重置循环以重新开始从头开始寻找下一个值。
需求:
给定一个大小为 N 的数组,任务是使用单个循环对该数组进行排序。
由于所有已知的排序方法都使用超过1个循环,因此很难想象用一个循环来做同样的事情。
实际上,这样做并非不可能,但这样做可能不是最优解。
示例1: 下面的代码将对包含整数元素的数组进行排序。
package main
import (
"fmt"
)
func sort(arr []int) {
for current := 0; current < len(arr)-1; current++ {
if arr[current] > arr[current+1] {
arr[current], arr[current+1] = arr[current+1], arr[current]
current = -1
}
}
func main() {
//非反转数组
arr := []int{1, 2, 45, 65, 32, 34}
// output: {1,2,32,34,45,65}
fmt.Printf("非反转数组: %d\n", arr)
//调用上面的排序函数
sort(arr)
fmt.Printf("反转数组: %d\n", arr)
}
输出:
非反转数组: [1 2 45 65 32 34]
反转数组: [1 2 32 34 45 65]
示例2:下面的代码将对包含数字的字符串切片进行排序。
package main
import (
"fmt"
)
func sort(arr []string) {
for current := 0; current < len(arr)-1; current++ {
if arr[current] > arr[current+1] {
arr[current], arr[current+1] = arr[current+1], arr[current]
current = -1
}
}
}
func main() {
//非反转数组
arr := []string{"1", "2", "45", "65", "32", "34"}
//输出: {"1","2","32","34","45","65"}
fmt.Printf("非反转数组: %s\n", arr)
//调用上面的排序函数
sort(arr)
fmt.Printf("反转数组: %s\n", arr)
}
输出:
非反转数组: [1 2 45 65 32 34]
反转数组: [1 2 32 34 45 65]
示例3:使用与字符串 []string 切片相同的方法对字母字符串进行排序。
package main
import (
"fmt"
"strings"
)
func sort(arr []string) {
for current := 0; current < len(arr)-1; current++ {
if arr[current] > arr[current+1] {
arr[current], arr[current+1] = arr[current+1], arr[current]
current = -1
}
}
}
func main() {
s := "PROGRAMMINGEEKSCLUB"
//非反转数组
arr := strings.Split(s,"")
//输出: [A B C E E G G I K L M M N O P R R S U]
fmt.Printf("非反转数组: %s\n", arr)
//调用排序函数
sort(arr)
fmt.Printf("反转数组: %s\n",arr)
}
输出:
非反转数组: [P R O G R A M M I N G E E K S C L U B]
反转数组: [A B C E E G G I K L M M N O P R R S U]
总结:
在单个循环中排序虽然看起来更好,但并不一定是最优解。
以下是使用单循环排序之前需要考虑的几点:
1.排序的时间复杂度在单个循环中不会改变(与多个循环排序相比)
2.单循环排序表明循环次数与算法的时间复杂度关系不大。
3.使用单个循环仅有助于缩短代码
原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..博主 在
科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 @ mashrdn 多切换几个节点测试,免费ssr是没那么稳..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号