冒泡排序(升、降及其改进)
void swap( int * a, int * b)
{
int temp = * a;
* a = * b;
* b = temp;
}
void Bubble_sort_descend( int arr[ ] , int length)
{
for ( int i = 0 ; i < length; i+ + )
{
for ( int j = length - 1 ; j > i; j- - )
{
if ( arr[ j - 1 ] < arr[ j] )
{
swap( & arr[ j- 1 ] , & arr[ j] ) ;
}
}
}
}
void Bubble_sort_ascend( int arr[ ] , int length)
{
for ( int i = 0 ; i < length; i+ + )
{
for ( int j = 0 ; j < length - i; j+ + )
{
if ( arr[ j] < arr[ j- 1 ] )
{
swap( & arr[ j] , & arr[ j- 1 ] ) ;
}
}
}
}
// 这是改进版,当某一次遍历之后发现发现并不需要交换,说明此时已经有序了,直接退出即可
void Bubble_sort_ascend_improve( int arr[ ] , int length)
{
int flag = 0 ;
for ( int i = 0 ; i < length & & flag == 0 ; i+ + )
{
flag = 1 ;
for ( int j = 0 ; j < length - i; j+ + )
{
if ( arr[ j] < arr[ j- 1 ] )
{
flag = 0 ;
swap( & arr[ j] , & arr[ j- 1 ] ) ;
}
}
}
}
void Show( int a[ ] )
{
for ( int i = 0 ; i < MAX; i+ + )
{
printf( "%d " , a[ i] ) ;
}
printf( "\n" ) ;
}
int main( int argc, char const * argv[ ] )
{
int a[ MAX] ;
srand( ( unsigned int ) time( NULL) ) ;
for ( int i = 0 ; i < MAX; i+ + )
{
a[ i] = rand( ) % MAX;
}
Show( a) ;
Bubble_sort_ascend_improve( a, MAX) ;
// Bubble_sort_descend( a, MAX) ;
Show( a) ;
return 0 ;
}