
2021-01-24:手写代码:快速排序。
发布日期:2021-05-04 20:00:51
浏览次数:22
分类:精选文章
本文共 2206 字,大约阅读时间需要 7 分钟。
福哥答案2021-01-24:
荷兰国旗问题三分+小于区递归+大于区递归。,相等区不用管。代码用go语言编写。利用slice特性,可以节省两个参数。代码如下:
package mainimport ( "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 testfunc 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 testfunc 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 testfunc IsEqual(arr1 []int, arr2 []int) bool { arr1Len := len(arr1) for i := 0; i < arr1Len; i++ { if arr1[i] != arr2[i] { return false } } return true}
执行结果如下:

发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年03月25日 07时04分54秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2019-03-05
NAT工作原理
2019-03-05
Processes, threads and goroutines
2019-03-05
c++中的10种常见继承
2019-03-05
wxpython的Hello,World代码探索
2019-03-05
【数字图像处理】OpenCV3 学习笔记
2019-03-05
【单片机开发】智能小车工程(经验总结)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2019-03-05
KeepAlived介绍、配置示例、KeepAlived配置IPVS、调用脚本进行监控
2019-03-05
Scala集合-数组、元组
2019-03-05
04 程序流程控制
2019-03-05
C++&&STL
2019-03-05
子集(LeetCode 78)
2019-03-05
1093 Count PAT‘s (25分) 含DP做法
2019-03-05
一篇解决JMM与volatile详解(二)
2019-03-05
数据结构之数组与经典面试题(二)
2019-03-05
无锁并发框架-Disruptor的使用(二)
2019-03-05
Android4.4 平板背光设置
2019-03-05
codeforces The Eternal Immortality 题解
2019-03-05
微信js-sdk使用简述(分享,扫码功能等)
2019-03-05