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; }
partition是一个非常有用,且常见的操作,因此,探讨他的高效实现是非常有意义的一件事情,在上一篇文章里,已经给出了两种实现方式,本文在给出两种实现方式.实现方式的巧妙我无法用语言告诉你,只用你自己去体会了.version Iint partition(int *array, int low, int high) ...{ int pivotpos = low; in