常见的几种排序算法
1.冒泡排序
#include <iostream>
int main ( )
{
int a[ ] { 49 , 38 , 27 , 97 , 76 , 13 , 27 , 49 } ;
for ( auto i = 7 ; i > 0 ; i-- ) {
for ( auto j= 0 ; j< i; j++ )
if ( a[ j] > a[ j + 1 ] ) {
auto t = a[ j] ;
a[ j] = a[ j + 1 ] ;
a[ j + 1 ] = t;
}
for ( auto e : a)
std:: cout << e << '\t' ;
std:: cout << '\n' ;
}
}
2.选择排序
#include <iostream>
#include <time.h>
#include <iomanip>
#include <stdlib.h>
using namespace std;
const int N= 10000 ;
int a[ N+ 5 ] ;
int main ( )
{
srand ( time ( NULL ) ) ;
for ( int i= 0 ; i< N; i++ )
{
a[ i] = rand ( ) % N;
}
for ( int i= 0 ; i<= N- 1 ; i++ ) {
int minA= a[ i] , minPos= i;
for ( int j= i+ 1 ; j<= N- 1 ; j++ )
{
if ( a[ j] < minA) {
minA= a[ j] , minPos= j;
}
}
swap ( a[ i] , a[ minPos] ) ;
}
for ( int i= 0 ; i< N; i++ ) {
cout<< setw ( 9 ) << a[ i] ;
}
return 0 ;
}
3.快速排序
#include <iostream>
using namespace std;
int partition ( int a[ ] , int start, int end)
{
int pivotvalue { a[ start] } ;
int L= start+ 1 , H= end;
int done{ 0 } ;
while ( ! done)
{
while ( L<= H and a[ L] <= pivotvalue)
L= L+ 1 ;
while ( H>= L and a[ H] >= pivotvalue)
H= H- 1 ;
if ( H< L)
done= 1 ;
else {
int t{ a[ L] } ;
a[ L] = a[ H] ;
a[ H] = t;
}
}
int t{ a[ H] } ;
a[ H] = a[ start] ;
a[ start] = t;
return H;
}
void qsort ( int a[ ] , int start, int end)
{
if ( start>= end) return ;
int pivot= partition ( a, start, end) ;
qsort ( a, start, pivot- 1 ) ;
qsort ( a, pivot+ 1 , end) ;
}
int main ( )
{
int a[ ] { 49 , 38 , 27 , 97 , 76 , 13 , 27 , 49 } ;
qsort ( a, 0 , 7 ) ;
for ( int i{ 0 } ; i!= 8 ; i++ )
cout<< a[ i] << '\t' ;
cout<< '\n' ;
}
4.直接插入排序
#include <iostream>
using namespace std;
void Insert_Sort ( int a[ ] , int n)
{
int i, j, k;
for ( i= 1 ; i< n; i++ )
{
for ( j= i- 1 ; j>= 0 ; j-- )
{
if ( a[ j] < a[ i] ) break ;
}
if ( j!= i- 1 )
{
int temp= a[ i] ;
for ( k= i- 1 ; k> j; k-- )
a[ k+ 1 ] = a[ k] ;
a[ k+ 1 ] = temp;
}
}
}
int main ( )
{
int n, a[ 100 ] ;
cin>> n;
for ( int i= 0 ; i< n; i++ )
cin>> a[ i] ;
Insert_Sort ( a, n) ;
for ( int i= 0 ; i< n; i++ )
cout<< a[ i] << ' ' ;
}
5.希尔排序
#include <iostream>
using namespace std;
void Shell_Sort ( int a[ ] , int n)
{
int i, j, k, gap, temp;
for ( gap= n/ 2 ; gap> 0 ; gap/ = 2 )
{
for ( i= 0 ; i< gap; i++ )
{
for ( j= i+ gap; j< n; j+ = gap)
{
if ( a[ j] < a[ j- gap] )
{
temp= a[ j] ;
k= j- gap;
while ( k>= 0 && a[ k] > temp)
{
a[ k+ gap] = a[ k] ;
k= k- gap;
}
a[ k+ gap] = temp;
}
}
}
}
}
int main ( )
{
int n, a[ 100 ] ;
cin>> n;
for ( int i= 0 ; i< n; i++ )
cin>> a[ i] ;
Shell_Sort ( a, n) ;
for ( int i= 0 ; i< n; i++ )
cout<< a[ i] << ' ' ;
}