#include <iostream>
#include <math.h>
#include <algorithm>
int randBetween( int low, int high ) {
// int direction = (rand()%2 == 0) ? -1:1;
return ((rand() % (high - low)) + low);
}
void exchange( int &elem1, int &elem2 )
{
int temp = elem1;
elem1 = elem2;
elem2 = temp;
}
int Partition( int* A, int p, int r )
{
int x = A[r];
int i = p-1;
for( int j = p; j <= r-1; j++ )
{
if( A[j] <= x )
{
i++;
exchange( A[i], A[j] );
}
}
exchange( A[i+1], A[r] );
return i+1;
}
int Randomized_Partition( int* A, int p, int r )
{
int i = randBetween( p, r );
exchange( A[r], A[i] );
return Partition( A, p, r );
}
void Quick_Sort( int* A, int p, int r )
{
if( p < r )
{
int q = Randomized_Partition( A, p, r );
Quick_Sort( A, p, q-1 );
Quick_Sort( A, q+1, r );
}
}
void print( int *A, int n )
{
for( int i = 0; i < n; i++ )
{
std::cout << A[i] << " ";
}
std::cout << std::endl;
}
int main( int argc, char* argv[] )
{
int length;
std::cout << " input the length of the array: ";
std::cin >> length;
int *A;
A = new int[length];
for( int i = 0; i < length; i++ )
{
std::cin >> A[i];
}
Quick_Sort( A, 0, length-1 );
print( A, length );
return 0;
}
快排 quicksort
最新推荐文章于 2024-08-10 17:55:54 发布