题目描述
912. 排序数组
解法一:快排
class Solution {
public :
int partition ( vector< int > & nums, int l, int r) {
int pivot = l;
for ( int i= l+ 1 ; i<= r; i++ )
{
if ( nums[ i] < nums[ l] ) swap ( nums[ i] , nums[ ++ pivot] ) ;
}
swap ( nums[ pivot] , nums[ l] ) ;
return pivot;
}
int randomized_partition ( vector< int > & nums, int l, int r) {
int i = rand ( ) % ( r- l+ 1 ) + l;
swap ( nums[ l] , nums[ i] ) ;
return partition ( nums, l, r) ;
}
void randomized_quicksort ( vector< int > & nums, int l, int r)
{
if ( l< r)
{
int pos = randomized_partition ( nums, l, r) ;
randomized_quicksort ( nums, l, pos- 1 ) ;
randomized_quicksort ( nums, pos+ 1 , r) ;
}
}
vector< int > sortArray ( vector< int > & nums) {
srand ( ( unsigned ) time ( NULL ) ) ;
randomized_quicksort ( nums, 0 , ( int ) nums. size ( ) - 1 ) ;
return nums;
}
} ;
解法二:堆排
class Solution {
public :
void adjustheap ( vector< int > & nums, int i, int len) {
int tmp = nums[ i] ;
for ( int k= i* 2 + 1 ; k< len; k= k* 2 + 1 )
{
if ( k+ 1 < len && nums[ k] < nums[ k+ 1 ] ) k++ ;
if ( nums[ k] > tmp)
{
nums[ i] = nums[ k] ;
i = k;
}
else break ;
}
nums[ i] = tmp;
}
void heapsort ( vector< int > & nums) {
for ( int i= nums. size ( ) / 2 - 1 ; i>= 0 ; i-- )
adjustheap ( nums, i, nums. size ( ) ) ;
for ( int i= nums. size ( ) - 1 ; i>= 1 ; i-- )
{
swap ( nums[ 0 ] , nums[ i] ) ;
adjustheap ( nums, 0 , i) ;
}
}
vector< int > sortArray ( vector< int > & nums) {
heapsort ( nums) ;
return nums;
}
} ;