手写快排,解决栈溢出写法,Golang

package main

import "fmt"

var swapcnt int

func main() {
	arr := []int{2, 3, 4, 5, 1}
	//idx := Swap(arr, 0, len(arr))
	//fmt.Println(idx, arr)
	myquickSort(arr, 0, len(arr)-1)
	fmt.Println(arr)
	fmt.Println(swapcnt)
}

func Swap(arr []int, l, r int) int {
	idx := l
	pivot := arr[r]
	for i := l; i <= r; i++ {
		if arr[i] <= pivot {
			if idx != i {
				arr[idx], arr[i] = arr[i], arr[idx]
				swapcnt += 1
			}
			idx += 1
		}
	}
	return idx - 1
}

func myquickSort(nums []int, l, r int) {
	if l < r {
		m := Swap(nums, l, r)
		myquickSort(nums, l, m-1)
		myquickSort(nums, m+1, r)
	}
}

func quickSort(nums []int, l, r int) { //[l,r]
	if l < r {
		m := partition(nums, l, r)
		quickSort(nums, l, m-1)
		quickSort(nums, m+1, r)
	}
}

func partition(nums []int, l int, r int) int {
	key := nums[r]
	i, j := l, l
	for j < r {
		if nums[j] < key {
			nums[i], nums[j] = nums[j], nums[i]
			i++
		}
		j++
	}
	nums[i], nums[r] = nums[r], nums[i]
	return i
}


// 解决栈溢问题
func qsort(arr []int, left, right int) {
	if left > right {
		return
	}
	pivot := arr[right]
	i, j := left, right
	for i < j {
		for i < j && pivot < arr[j] {
			j--
		}
		for i < j && pivot >= arr[i] {
			i++
		}
		arr[i], arr[j] = arr[j], arr[i]
	}
	qsort(arr, left, i-1)
	qsort(arr, i+1, right)
}



posted @   Notomato  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示