C++ 快排

时间:2023-03-09 04:44:28
C++ 快排
// 进行一轮快排并返回当前的中间数
int getMiddle( int* arr, int low, int high ) {
auto swaparr = [&]( int i, int j ) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}; if( high - low > ) {
int k = arr[low], i = low, j = high;
while( i != j ) {
//R->L
for( ; j > i && arr[j] >= k; j-- );
swaparr( i, j );
//L->R
for( ; i < j && arr[i] <= k; i++ );
swaparr( i, j );
}
return i;
}
return -;
} //
void _fastSort( int* arr, int low, int high ) {
int mid = getMiddle( arr, low, high );
if( mid != - ) {
_fastSort( arr, low, mid- );
_fastSort( arr, mid+, high );
}
}
//
void fastSort(int* arr,int len) {
if( arr && len )
_fastSort( arr, , len - );
}