partition是一个非常有用,且常见的操作,因此,探讨他的高效实现是非常有意义的一件事情,在上一篇文章里,已经给出了两种实现方式,本文在给出两种实现方式.实现方式的巧妙我无法用语言告诉你,只用你自己去体会了.
version I

int partition(int *array, int low, int high) ...{
int pivotpos = low;
int pivot = array[pivotpos];

for ( int i = low + 1; i <= high; ++ i ) ...{
if ( array[i] < array[pivotpos] && ++ pivotpos != i )
swap( array[i], array[pivotpos] );
}
swap ( array[low], array[pivotpos] );
return pivotpos;
}
version II

int partition(int *array, int low, int high) ...{
int pivot = array[high];
int i = low - 1;
for (int j = low; j < high; ++ j) ...{
if (array[j] <= array[pivot]) ...{
++ i;
swap( array[i], array[j] );
}
}
swap( array[i + 1], array[high] );
return i + 1;
}
本文介绍了两种高效的分区算法实现方式,这些算法对于排序等常见操作至关重要。第一种算法通过维护一个枢轴位置来重新组织元素;第二种算法选择最后一个元素作为枢轴,并通过遍历将小于等于枢轴的元素移到左边。这两种方法都极大地提高了分区操作的效率。
1066

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



