归并排序的实现
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