Implemention of Partition Function

本文介绍了两种高效的分区算法实现方式,这些算法对于排序等常见操作至关重要。第一种算法通过维护一个枢轴位置来重新组织元素;第二种算法选择最后一个元素作为枢轴,并通过遍历将小于等于枢轴的元素移到左边。这两种方法都极大地提高了分区操作的效率。

 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值