
- package main
-
- import "fmt"
-
- func main() {
- var n int
- fmt.Scanf("%d", &n)
- nums := make([]int, n)
- for i:=0;i
- fmt.Scanf("%d", &nums[i])
- }
- quickSort(nums, 0, n-1)
- for i:=0;i
- fmt.Printf("%d ", nums[i] )
- }
- }
-
- func quickSort(nums []int ,left, right int ) {
- if left >= right { // 终止条件
- return
- }
- mid := nums[left + (right-left)/2] // 注意这里要是一个确定值,而是一个下标。
- i, j := left-1, right+1 // 两个指针,因为do while要先自增/自减
- for i < j { // 每次迭代
- for { // do while 语法
- i++ // 交换后指针要移动,避免没必要的交换
- if nums[i] >= mid {
- break
- }
- }
- for {
- j--
- if nums[j] <= mid {
- break
- }
- }
- if i < j { // swap 两个元素
- nums[i], nums[j] = nums[j], nums[i]
- }
- }
- // 递归处理左右两段
- quickSort(nums, left, j)
- quickSort(nums, j+1, right)
- }
模板背诵
- // 快速排序模板,不要背诵字母,要背诵思路和基本代码表达
- func quickSort(nums []int, l, r int) {
- if l >= r { // 终止条件
- return
- }
- x := nums[l+(r-l)/2] // 确定分界点,这里要是一个值,而不是下标。
- i, j := l-1, r+1 // 两个指针,因为do while要先自增/自减
- for i < j { // 每次迭代
- for { // do while 语法
- i++ // 交换后指针要移动,避免没必要的交换
- if nums[i] >= x {
- break
- }
- }
- for {
- j--
- if nums[j] <= x {
- break
- }
- }
- if i < j { // swap 两个元素
- nums[i], nums[j] = nums[j], nums[i]
- }
- }
- quickSort(nums, l, j) // 递归处理左右两段
- quickSort(nums, j+1, r)
- }
-
相关阅读:
【小型网站测试】使用python脚本来控制docker容器的编排
Netty进阶——粘包与半包(滑动窗口)
代码注释有感
【探索Linux】—— 强大的命令行工具 P.10(进程的控制——创建、终止、等待、程序替换)
IC入行第一步:怎样选择岗位和公司?
Spring Boot 日志文件
PCA降维代码实现
python之集合的创建与使用,遍历,集合常见的操作函数,集合与列表,元组,字典的嵌套
【poi导出excel之XSSFWorkbook】
git远程操作
-
原文地址:https://blog.csdn.net/weixin_42161901/article/details/127943473