go实现随机快速排序

快速排序(golang) 发明者为东尼霍尔,大部分情况下排序效率很不错。 算法原理也比较容易理解: 第一步: 从当前数列中随机选定一个值作为基准(pivot),然后将数列中小于该基准的值放在基准的左边,将大于该基准的值放在基准的右边,与基准的值相等的可随意放左边或者右边都可。当前基准将数列分成两部分,这个操作过程称为分区(partition)操作。 第二步: 递归地将所有分区进行第一步所进行的操作,直到无法进行分区操作为止。 为了简化随机选取基准的操作,就固定的从分区的最左测选取即可。 大致的代码就是这样的 f 阅读详情
package main

import (
	"fmt"
	"math/rand"
	"time"
)

func swap(arr []int, i, j int) {
	arr[i], arr[j] = arr[j], arr[i]
}

func partition(arr []int, left, right, key int) []int { // 划分
	less := left - 1  // 小于区
	more := right + 1 // 大于区
	index := left     // 下标
	for index < more {
		if arr[index] < key { // 小于划分值,就放到小于区
			swap(arr, less+1, index)
			less++  // 扩大小于区
			index++ // 比较下一个值
		} else if arr[index] > key { // 大于划分值,就放到大于区
			swap(arr, more-1, index)
			more-- // 扩大大于区;索引位置不变(因为当前值已经改变,需要再次比较)
		} else {
			index++ // 相同时,比较下一个数
		}
	}
	// 返回等于区的位置
	return []int{less + 1, more - 1}
}

func randInt(left, right int) int { //生成随机数
	rand.Seed(time.Now().UnixNano())
	// 生成[left, right]闭区间内的随机数
	return rand.Intn(right-left+1) + left 
}

func RandomQuickSort(arr []int, left, right int) {
	if arr == nil || len(arr) < 2 {
		return
	}
	if left < right {
		//选取随机数
		key := randInt(left, right) //随机选择一个数组下标
		fmt.Println("随机数key = ", key)
		key = arr[key] //取出随机划分值
		fmt.Println("数组值key = ", key)
		part := partition(arr, left, right, key) //随机选择一个数组中的数作为划分值
		RandomQuickSort(arr, left, part[0]-1)
		RandomQuickSort(arr, part[1]+1, right)
	}
}

func main() {
	arr := []int{3, 1, 2, 23, 8}	
	fmt.Println("排序前:", arr)
	RandomQuickSort(arr, 0, len(arr)-1)	
	fmt.Println("排序后:", arr)
}
go语言:实现随机正态分布快速排序算法(附完整源码) 阅读详情

相关推荐

STM32G0定时器中断实战:HAL库配置TIM2实现精准1秒LED闪烁(附完整代码)

本文深入解析了STM32G0系列微控制器中定时器中断的配置与应用,重点介绍了如何使用HAL库配置TIM2实现精准的1秒LED闪烁。通过详细讲解时钟树分析、预分频系数与自动重装载寄存器的计算原理,并结合CubeMX图形化配置与完整代码示例,帮助开发者从底层理解定时器工作机制,掌握可复用的工程化配置方法。

weixin_29194817的博客 252

Go实战--golang中各种排序算法实现以及生成随机数

排序,对于每种编程语言都是要面对的。这里跟大家一起分享golang实现一些排序算法,并且说明如何生成随机数。 当然,golang为我们提供了sort包,也提供了math/rand包,这就大大方便了我们。 还要说明一下,这里不会详细介绍各种排序算法的原理,如需探索自行Google。 sort package Package sort provides primitives for sortin...

小丢的专栏 917

SSTI模板注入及绕过姿势(基于Python-Jinja2)

http://xmctf.top:8962/?name={{%22%22[%22\x5f\x5fclass\x5f\x5f%22]["\x5F\x5Fbase\x5F\x5F"]["\x5F\x5Fsubclasses\x5F\x5F"]()[233]["\x5F\x5Finit\x5F\x5F"]["\x5F\x5Fglobals\x5F\x5F"]["\x5F\x5Fbuiltins\x5F\x5F"]['eval']("\x5F\x5Fimport\x5F\x5F('os'))")}}

Y4tacker的博客 1万+

go语言快速排序(优化内存)

(视频学习来自哔哩哔哩) 源代码: package main //交换的函数 func Swap(arr []int, i, j int){ arr[i],arr[j]=arr[j],arr[i] } func QuickSort2(arr []int, left,right int){ if (right-left)<1{//递归结束标志,当数组只有一个时认为时有序的 return } //以第一个作为基准(升序) posnum := arr[left] //定义区域 low :

qq_44477844的博客 419

基于STM32XX的LCD液晶显示屏(HS19264G06A、驱动芯片:ST7525)驱动C程序设计

define USE_HW_SPI 1 // 1:使用硬件SPI, 0:使用软件模拟SPI。

myron6688的博客 234

《嵌入式最全面试题-Offer直通车》目录

嵌入式领域蓬勃发展,嵌入式工程师成为众多科技企业争抢的热门人才。如果你渴望在嵌入式面试中脱颖而出,成功斩获心仪的 offer,那么《嵌入式最全面试题 - Offer直通车》将是你的绝佳选择。本专栏是优快云是热门专栏,100多篇文章,总字数过百万。每月新增订阅用户过百,现在是优惠价9.9元,后面要逐渐恢复原价,早订阅早受益。本专栏精心整理了众多超万字的精华内容,总计达数十万字的嵌入式面试题总结。涵盖从嵌入式基础知识到各大厂面试真题,从驱动开发到操作系统,从硬件到软件等各个方面。

大模型大数据攻城狮的专栏 8384

各种排序算法(Golang版本)

1.快速排序 快速排序是一种非稳定排序。 func findPivot(nums []int, left int, right int) int { pivot := nums[left] // pivot的选择这里一直取第0个元素,可换成随机数 nums[left], nums[right] = nums[right], nums[left] var back = left - 1 var front = left for front < right

qq_29848559的博客 684

图文教程本地部署开源扣子Coze Studio工作流并接入 Gemini 大模型(windows亲测) Coze Studio 本地部署、Gemini 模型接入、开源 AI 工具平台、大模型工作流搭建

本文介绍了在Windows系统本地部署开源AI工具平台Coze Studio并接入Google Gemini大模型的完整教程。主要内容包括:1) 环境准备要求(Docker等);2) 获取源码和配置Gemini模型(需API密钥);3) 通过Docker Compose部署服务;4) 浏览器访问验证。文章指出该平台适合私有化部署,支持智能体和工作流搭建,但也存在插件系统不完善等局限。最后提供了相关资源链接,为开发者实现本地AI解决方案提供了实用指南。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2779

golang 排序list_数据结构和算法(Golang实现)(25)排序算法-快速排序

快速排序快速排序是一种分治策略的排序算法,是由英国计算机科学家Tony Hoare发明的, 该算法被发布在1961年的Communications of the ACM 国际计算机学会月刊。注:ACM = Association for Computing Machinery,国际计算机学会,世界性的计算机从业员专业组织,创立于1947年,是世界上第一个科学性及教育性计算机学会。快速排序是对冒泡排...

weixin_35241415的博客 774

XSS漏洞之PDF生成:从XSS到服务端任意文件读取

XSS是最为常见的Web漏洞之一,多年来连续入选OWASP TOP10,相信大家都耳熟能详。 它是一种代码注入类的攻击,是一种客户端侧的攻击,攻击者通过在Web应用中注入恶意JavaScript代码,通过点击URL,最终在受害者浏览器端执行的一种漏洞。主要有反射型XSS、存储型XSS、基于DOM的XSS三类。XSS一些比较常规的危害大概有:重定向浏览器、窃取Cookie、浏览器劫持等。本文章侧重于发现XSS后的进一步利用。 主要介绍在某次实际测试过程中,发现XSS漏洞之后,如何进一步的利用,最终通过XSS达

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 3777

【异常】API 速率限制报错问题全流程排查与解决指南 API rate limit reached. Please try again later.

摘要: 本文针对大模型API开发中常见的速率限制报错("API rate limit reached")提供全流程解决方案。首先解析该报错的本质是服务端对高频调用的保护机制,通过三步排查法确认根因:客户端请求频率超出账户阈值。提出三级解决方案:1)临时等待限流周期重置;2)升级付费账户提高调用配额;3)构建多模型容灾架构实现自动切换。建议生产环境优先采用容灾方案,通过备用API节点保障业务连续性,同时平衡不同模型服务的成本与性能。

奶爸的编程之路,也就一周冷个三天 1419

教你如何运用golang 实现数组的随机排序

本文主要介绍了golang 数组随机排序的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 前言 目前接到一个推荐数据的需求,需要将数据库中获取到的数据进行随机排序后返回给用户。考虑了一下,有两种使用方式,一种是通过数据库 order by rand() ,还有一种就是本文需要使用到的代码处理 具体实现步骤如下 1.引入库 代码如下: import ( "fmt" "math/rand" "time" ) 2.组装数据并排序(方案一) 代码如下

Free雅轩的博客 2585

S32K144 UDSdoCAN 升级刷写实现笔记

本篇旨在描述如何开发“车规级”的软件升级程序,通过在S32K144平台上实现基于UDSdoCAN的刷写升级功能,带你一步步建立安全升级的“工程思维”,在这里既能收获经验还能获得工程源码、测试脚本,助你起飞,避坑提速!

汽车电子软件领域知识分享 811

Go语言实现随机快速排序

解析 l + (int) (Math.random() * (r - l + 1)) 解析: 假设 l = 4,r = 9 目的:随机选择 4 ~ 9 之间的一个数,使它与末尾的数交换位置 Math.random() * ( 9 - 4 )所得出的范围是 [ 0 , 4 ] Math.random() * ( 9 - 4 + 1 )所得出的范围是 [ 0 , 5 ] ,所以这里采用 r - l +...

Alex 681

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

go语言:实现随机正态分布快速排序算法(附带源码)

go语言:实现随机正态分布快速排序算法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 812

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

golang 随机化快速排序

package main import ( "math/rand" "fmt" ) func Partition(A []int, p, r int) int { x := A[p] i := p for j := p + 1; j <= r; j++ { if A[j] <= x { i++ A[i], A[j] = A[j], A[i] } } A[p], A[i] = A[i], A[p] return i } func RandomQ.

sky_terra的专栏 274

快速排序 golang

快速排序 golang 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序 个项目要(大O符号)次比较。在最坏状况下则需要次比较,但这种状况并不常见。 快排应用 快排是一般语言内置排序包中的实现,当然在数组大小不同的情况下会有不同的选择,但是整体以快排为主,为了防止出...

lcf枫的博客 3832

[Golang]快速排序

【代码】[Golang]快速排序。

DeShuiYu的博客 167

用Go汇编实现一个快速排序算法

本代码全网首发,使用Go plan9 windows arm64汇编,实现基础版快速排序算法

Go的全部 1234

Go开发连接MYSQL、Go取得随机字符串的三种方法代码 以及使用Go实现冒泡排序和快速递归

最近闲余时间接触了一点GO,真不知道它好用在哪,在Go语言中没有类(Class)的概念,然而编程又离不开面向对象,于是GO说我没有类的概念,但我也能实现面向对象编程。在Go中使用结构体(Structs)对属性进行封装,结构体就像是类的一种简化形式。然后再在Go中定义一些方法并且作用在接收者(receiver)上的一个函数,简单描述就是GO中没有类的概念,但你可以定义一个Struct结构,当作类。这个结构中的属性当做类的属性,然后单独定义一些方法挂载到这个结构上,模拟出了一个类。但感觉还是挺别扭的。

本博客记录了从2014年以来在工作学习中遇到的技术问题、解决方法以及部分个人人生经历、经验等内容。 1575

go语言:实现快速排序算法(附带源码)

go语言:实现快速排序算法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 614

go语言实现快速排序

这是最近重新巩固的快速排序,快速排序1.0和2.0版本时间复杂度都是O(N²),快速排序3.0版本的时间复杂度为O(N*logN)。 快速排序思想:以数组的最后一个数为靶心,数组会分为三个区域(区域内不一定有序):大于靶心的放在右侧,小于靶心的放在左侧,等于靶心的放在中间(这里的分区域放置实现是使用交换的方式)。 快速排序3.0对靶心的选取是通过随机选取,并与数组的最后一位交换来作为靶心,所以是它与概率有关,每个数做靶心的机会都是随机的。 package main import ( "fmt" "ma

qq_37874758的博客 309

go语言快速排序Quick sort

package main import ( "fmt" "math/rand" ) var TOT = int(20) func main() { var arry []int for i:= 0; i < TOT; i++{ arry = append(arry, rand.Intn(TOT))

qq_24484583的博客 227

Go实现快速排序算法

Go实现快速排序算法

coolsunxu的博客 386

【排序算法】十大排序之快速排序

快速排序是一种分治的排序算法。快速排序的基本思想:通过一趟排序将待排序列分隔成独立的两部分,其中一部分记录的元素均比另一部分的元素小,则可分别对这两部分子序列继续进行排序,以达到整个序列有序。

北方的孤夜 239

GO 快速排序

为什么80%的码农都做不了架构师?>>> ...

weixin_33948416的博客 63
上一篇: go实现快速排序
下一篇: LeetCode题解-167. 两数之和 II - 输入有序数组
ceshell
博客等级 码龄7年 4粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值