由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 非典型QuickSort的Partition函数,怎么证明是对的?
相关主题
吐槽QuickSort的partitionProgramming Pearl上的3way partition好像不work
quicksort到底以哪个为准啊到底怎么了?很多面试来的居然连reverse一个链表都写不来
比较两个QuickSort函数问个MS 老问题
找median有O(N)的算法吗?~~~~~~~~问个G家的题~~~~~~~~~~~
请教leetcode里quicksort的codeOne bug in my 3-way string quicksort implementation
bloomberg刚店面晚。 悔阿Re: 贡献个facebook电话interview
其实我很想知道, 多少软工能45分钟内把quicksort写下来买书给点意见
QuickSort的各种partition方法关于quicksort的两种实现方法
相关话题的讨论汇总
话题: left话题: partition话题: right话题: arr话题: pivot
进入JobHunting版参与讨论
1 (共1页)
K*****k
发帖数: 430
1
典型的Hoare双向扫描Partition法一般都会在左右设置sentinel, 或者对左右边界检测
下标越界,这个非典型的代码却不用。
int Partition(int arr[], int left, int right)
{
int pivot = arr[left + (right - left) / 2];
while (left <= right)
{
while (arr[left] < pivot]
left++;
while (arr[right] > pivot]
right--;
if (left <= right)
{
swap(arr, left, right);
left++;
right--;
}
}
return left;
}
e***l
发帖数: 710
2
if (left <= right)
应该是if (arr[left] >= arr[right])
正确性是显然的,左边不大于pivot,右边不小于pivot
K*****k
发帖数: 430
3
代码来自CareerCup那本书
CLRS和编程珠玑都喜欢讲解Lumoto版本的Partition
编程珠玑提到的Hoare版本Partition,每次都需要检测右边界 (i <= u),
看去效率稍低
...
t = x[L]; i = L; j = U + 1;
loop
do i++; while i <= u && x[i] < t
do j--; while x[j] > t
if (i > j)
break;
swap(i, j)
end loop
swap(L, j)
...

【在 e***l 的大作中提到】
: if (left <= right)
: 应该是if (arr[left] >= arr[right])
: 正确性是显然的,左边不大于pivot,右边不小于pivot

1 (共1页)
进入JobHunting版参与讨论
相关主题
关于quicksort的两种实现方法请教leetcode里quicksort的code
这题到底是啥意思bloomberg刚店面晚。 悔阿
面试题 finding missing value其实我很想知道, 多少软工能45分钟内把quicksort写下来
kth smallest elementQuickSort的各种partition方法
吐槽QuickSort的partitionProgramming Pearl上的3way partition好像不work
quicksort到底以哪个为准啊到底怎么了?很多面试来的居然连reverse一个链表都写不来
比较两个QuickSort函数问个MS 老问题
找median有O(N)的算法吗?~~~~~~~~问个G家的题~~~~~~~~~~~
相关话题的讨论汇总
话题: left话题: partition话题: right话题: arr话题: pivot