【数据结构的魅力】003.算法归并与随机快排

本文深入探讨了两种经典的排序算法——归并排序和快速排序。对于归并排序,分别介绍了递归和非递归的实现方式。而在快速排序部分,详细阐述了Partition过程,并提出了三种不同版本的实现,包括处理相等元素的优化策略。此外,还讨论了如何在快速排序中使用随机选取元素来提升效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

归并排序的实现

1)递归方法实现

2)非递归方法实现

快速排序

Partition过程

实现思路:

给定一个num,划定一个<=区,初始坐标为-1

  • 如果[i]==num,i++
  • 如果[i]<=num,将[i]与<=区的下一个位置的元素互换,<=区下标+1,i++
  • i在数组越界位置停止

思考:如果是分成<num,=num,>num三个区域呢?

实现思路:

给定一个num,划定两个区,一个为<=区,出示下标为-1,一个为>=区,初始下标为数组最大长度+1(即越界位置)

  • 如果num==[i],i++
  • 如果[i]<=num,将[i]与<=区的右位置的元素互换,<=区下标+1,i++
  • 如果[i]>=num,将[i]与>=区的左位置的元素互换,>=区下标-1,i留在原地
  • i在和>=区相遇时停止

程序的num给定为arr[R],返回==区域的左右边界

6

1)快排v1.0

每次搞定一个与num相等的数

2)快排v2.0

每次搞定一批与num相等的数

3)经典快排

随机填选一个数与末尾进行交换,然后进行快排v2.0

qY-1646378566391)]

3)经典快排

随机填选一个数与末尾进行交换,然后进行快排v2.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值