当前位置: 首页 > news >正文

【AcWing】快速排序的Go实现

快速排序的Go实现

这一部分参考了AcWing当中使用Go语言实现快速排序的题解:https://www.acwing.com/activity/content/code/content/296206/。

其中有很多部分非常值得参考,故写一个博客进行记录。

Code

package mainimport "fmt"func quick_sort(q []int, l, r int) {if l >= r {return}x := q[l+(r-l)/2]i, j := l-1, r+1for i < j {for i++; q[i] < x; i++ {}for j--; q[j] > x; j-- {}if i < j {q[i], q[j] = q[j], q[i]}}quick_sort(q, l, j)quick_sort(q, j+1, r)
}func main() {var n intfmt.Scanf("%d", &n)q := make([]int, n+5)for i := 1; i <= n; i++ {fmt.Scanf("%d", &q[i])}quick_sort(q, 1, n)for i := 1; i <= n; i++ {fmt.Printf("%d ", q[i])}return
}
  • 首先,对于大部分只需要标准输入输出的算法题,只需要导入fmt包即可,fmt可以完成标准的输入输出。使用fmt.Scanf("%d", &n)完成数组长度n的输入,使用fmt.scanf("%d, &q[i])来完成数组当中元素的输入。
  • 其次,在创建长度为n的数组时,可以使用Go当中的make方法,第一个参数是类型,即int[],而第二个参数是长度,由于我使用的下标从1开始,因此此处创建数组的长度比n稍大,避免越界。
  • 使用fmt.Prinf("%d", q[i])完成数组的遍历输出。
  • 在quick_sort部分,可以看到i, j := l-1, r+1q[i], q[j] = q[j], q[i]这样的语句,Go语言可以像Python那样一次为多个变量进行赋值,其中q[i], q[j] = q[j], q[i]直接完成了C++当中的swap操作。
  • for i++; q[i] < x; i++ {} 操作直接等价于C++当中的do{i ++;} while(q[i] < x),注意Go语言当中没有do... while...的用法,可以使用上述for循环进行替代,Go语言中只有for一种循环语句,但是它是非常灵活的。
  • 在快速排序选取哨兵结点时,必须使用x := q[l+(r-l)/2],否则会报错。
  • 需要注意的是,在AcWing的OJ中,Go语言实现的快排执行时间来到了4900+ms,而C++版本实现的快排仅需要100+ms,差距非常大,说明C++的效率非常的高。
http://www.lryc.cn/news/435877.html

相关文章:

  • 使用C++11的`std::future`和`std::promise`实现异步网络通信
  • 【C++登堂入室】类与对象(上)
  • 【西电电装实习】5. 无人机模块及作用、上位机的操作
  • 有关WSL和docker的介绍
  • 以太坊入门
  • 秃姐学AI系列之:实战Kaggle比赛:狗的品种识别(ImageNet Dogs)
  • 图神经网络介绍3
  • 浅谈 React Fiber
  • Winform实现石头剪刀布小游戏
  • 计算机的错误计算(九十)
  • 对游戏语音软件Oopz遭遇DDoS攻击后的一些建议
  • 解锁Android开发利器:MVVM架构_android的mvvm
  • llama.cpp demo
  • OpenCV结构分析与形状描述符(19)查找二维点集的最小面积外接旋转矩形函数minAreaRect()的使用
  • [SWPU2019]Web1 超详细教程
  • 【区块链通用服务平台及组件】基于向量数据库与 LLM 的智能合约 Copilot
  • mfc140u.dll丢失有啥方法能够进行修复?分享几种mfc140u.dll丢失的解决办法
  • 【PyQt6 应用程序】在用户登录界面实现密码密文保存复用
  • 赋能百业:多模态处理技术与大模型架构下的AI解决方案落地实践
  • 游戏论坛网站|基于Springboot+vue的游戏论坛网站系统游戏分享网站(源码+数据库+文档)
  • 【go】pprof 性能分析
  • Python | Leetcode Python题解之第397题整数替换
  • JDBC使用
  • 633. 平方数之和-LeetCode(C++)
  • Linux shell编程学习笔记79:cpio命令——文件和目录归档工具(下)
  • 《 C++ 修炼全景指南:七 》优先级队列在行动:解密 C++ priority_queue 的实现与应用
  • 通信工程学习:什么是HSS归属用户服务器
  • mysql workbench 如何访问远程数据库
  • ICMAN触摸感应芯片方案
  • 面向个小微型企业的开源大模型(Qwen2等)商业化, AI部署成本分析与优化策略(费用分析、资源消耗分析)