2020-01-24:手写代码:快速排序。
福哥答案2020-01-24:
荷兰国旗问题三分+小于区递归+大于区递归。,相等区不用管。
代码用go语言编写。利用slice特性,可以节省两个参数。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | package main import ( "fmt" "math/rand" "time" ) func main() { rand.Seed(time.Now().Unix()) sucCount := 0 failedCount := 0 for i := 0; i < 2000; i++ { arr1 := GenRandArr() arr2 := make([]int, len(arr1)) fmt.Println( "原数组:" , arr1) copy(arr2, arr1) BubbleSort(arr1) QuickSort(arr2) fmt.Println( "冒泡排序" , arr1) fmt.Println( "快速排序" , arr2) fmt.Println( "--------" ) if IsEqual(arr1, arr2) { sucCount++ } else { failedCount++ } } fmt.Println( "成功:" , sucCount) fmt.Println( "失败:" , failedCount) } //荷兰国旗问题三分 func partition(arr []int, val int) (int, int) { lessEqual := -1 moreEqual := len(arr) index := 0 for index < moreEqual { if arr[index] < val { //左区右扩 lessEqual++ arr[index], arr[lessEqual] = arr[lessEqual], arr[index] index++ } else if arr[index] > val { //右区左扩,注意index不会++ moreEqual-- arr[index], arr[moreEqual] = arr[moreEqual], arr[index] } else { //相等区 index++ } } return lessEqual, moreEqual } //三分随机快排递归 func QuickSort(arr []int) { arrLen := len(arr) if arrLen < 2 { return } //荷兰国旗问题三分,以数组中的随机1个元素划分 left, right := partition(arr, arr[rand.Intn(arrLen)]) //左边快排 QuickSort(arr[0 : left+1]) //右边快排 QuickSort(arr[right:]) } //for test func GenRandArr() []int { ret := make([]int, rand.Intn(20)+10) retLen := len(ret) for i := 0; i < retLen; i++ { ret[i] = rand.Intn(100) } return ret } //for test func BubbleSort(arr []int) { arrLen := len(arr) if arrLen < 2 { return } for i := 0; i < arrLen-1; i++ { for j := 0; j < arrLen-1-i; j++ { if arr[j] > arr[j+1] { arr[j], arr[j+1] = arr[j+1], arr[j] } } } } //for test func IsEqual(arr1 []int, arr2 []int) bool { arr1Len := len(arr1) for i := 0; i < arr1Len; i++ { if arr1[i] != arr2[i] { return false } } return true } |
执行结果如下:
公众号:福大大架构师每日一题
分类:
福大大架构师每日一题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具