归并排序的实现
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],返回==区域的左右边界

1)快排v1.0
每次搞定一个与num相等的数

2)快排v2.0
每次搞定一批与num相等的数

3)经典快排
随机填选一个数与末尾进行交换,然后进行快排v2.0
qY-1646378566391)]
3)经典快排
随机填选一个数与末尾进行交换,然后进行快排v2.0

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

被折叠的 条评论
为什么被折叠?



