冒泡排序
# include <iostream>
# include <cstdio>
# include <algorithm>
using namespace std;
int a[ 1001 ] ;
int main ( )
{
int n;
cin>> n;
for ( int i= 0 ; i< n; i++ ) cin>> a[ i] ;
for ( int i= 0 ; i< n; i++ ) {
for ( int j= 0 ; j< n- i- 1 ; j++ ) {
if ( a[ j] > a[ j+ 1 ] ) swap ( a[ j] , a[ j+ 1 ] ) ;
}
}
for ( int i= 0 ; i< n; i++ ) cout<< a[ i] << " " ;
return 0 ;
}
# include <iostream>
# include <cstdio>
# include <algorithm>
using namespace std;
int a[ 1001 ] ;
int main ( )
{
int n;
cin>> n;
for ( int i= 1 ; i< n; i++ ) cin>> a[ i] ;
for ( int i= 0 ; i< n; i++ ) {
for ( int j= 1 ; j< n- i; j++ ) {
if ( a[ j] > a[ j+ 1 ] ) swap ( a[ j] , a[ j+ 1 ] ) ;
}
}
for ( int i= 1 ; i<= n; i++ ) cout<< a[ i] << " " ;
return 0 ;
}
快排
# include <iostream>
# include <algorithm>
# include <string.h>
using namespace std;
typedef long long ll;
const int N= 100010 ;
int a[ N] , n;
void qsort ( int l, int r)
{
int mid= a[ ( l+ r) >> 1 ] ;
int i= l, j= r;
do {
while ( a[ i] < mid) i++ ;
while ( a[ j] > mid) j-- ;
if ( i<= j) {
swap ( a[ i] , a[ j] ) ;
i++ ;
j-- ;
}
} while ( i<= j) ;
if ( i< r) qsort ( i, r) ;
if ( j> l) qsort ( l, j) ;
}
int main ( )
{
cin>> n;
for ( int i= 1 ; i<= n; i++ ) cin>> a[ i] ;
qsort ( 1 , n) ;
for ( int i= 1 ; i<= n; i++ ) cout<< a[ i] << " " ;
return 0 ;
}
归并排序
# include <iostream>
# include <algorithm>
# include <string.h>
using namespace std;
typedef long long ll;
const int N= 100010 ;
int a[ N] , n, tmp[ N] ;
void msort ( int q[ ] , int l, int r)
{
if ( l>= r) return ;
int mid= ( l+ r) >> 1 ;
msort ( q, l, mid) ;
msort ( q, mid+ 1 , r) ;
int k= 0 , i= l, j= mid+ 1 ;
while ( i<= mid&& j<= r) {
if ( q[ i] <= q[ j] ) tmp[ k++ ] = q[ i++ ] ;
else tmp[ k++ ] = q[ j++ ] ;
}
while ( i<= mid) tmp[ k++ ] = q[ i++ ] ;
while ( j<= r) tmp[ k++ ] = q[ j++ ] ;
for ( i= l, j= 0 ; i<= r; i++ , j++ ) q[ i] = tmp[ j] ;
}
int main ( )
{
cin>> n;
for ( int i= 1 ; i<= n; i++ ) cin>> a[ i] ;
msort ( a, 1 , n) ;
for ( int i= 1 ; i<= n; i++ ) cout<< a[ i] << " " ;
return 0 ;
}
逆序对(归并)
# include <iostream>
# include <string.h>
# include <algorithm>
# include <math.h>
using namespace std;
const int N= 500010 ;
int n, a[ N] , tmp[ N] ;
long long ans= 0 ;
void msort ( int l, int r)
{
if ( l>= r) return ;
int mid= ( l+ r) >> 1 ;
msort ( l, mid) ;
msort ( mid+ 1 , r) ;
int k= 0 , i= l, j= mid+ 1 ;
while ( i<= mid&& j<= r) {
if ( a[ i] <= a[ j] ) tmp[ k++ ] = a[ i++ ] ;
else {
tmp[ k++ ] = a[ j++ ] ;
ans+= mid- i+ 1 ;
}
}
while ( i<= mid) tmp[ k++ ] = a[ i++ ] ;
while ( j<= r) tmp[ k++ ] = a[ j++ ] ;
for ( i= l, j= 0 ; i<= r; i++ , j++ ) a[ i] = tmp[ j] ;
}
int main ( )
{
cin>> n;
for ( int i= 1 ; i<= n; i++ ) cin>> a[ i] ;
msort ( 1 , n) ;
cout<< ans;
return 0 ;
}
小根堆排序
# include <iostream>
using namespace std ;
int a[ 100 ] ;
void heap ( int s, int n) {
int i, j = 1 , k = a[ s] , max = 0 ;
while ( j!= max) {
i = a[ s] ;
j = max ;
if ( 2 * s<= n)
if ( a[ s* 2 ] < i) {
i = a[ s* 2 ] ;
j = s * 2 ;
}
if ( s* 2 + 1 <= n)
if ( a[ s* 2 + 1 ] < i) {
i = a[ s* 2 + 1 ] ;
j = s* 2 + 1 ;
}
if ( j!= max) {
a[ s] = i ;
s = j ;
}
a[ s] = k ;
}
}
int main ( ) {
int n, i ;
cin >> n ;
for ( i= 1 ; i<= n; i++ )
cin >> a[ i] ;
for ( i= n/ 2 ; i> 0 ; i-- )
heap ( i, n) ;
for ( i= n; i> 1 ; i-- ) {
cout << a[ 1 ] << " " ;
a[ 1 ] = a[ i] ;
n -- ;
heap ( 1 , n) ;
}
cout << a[ 1 ] << " " ;
return 0 ;
}