基本概念
时间复杂度:执行一个算法耗费的时间 空间复杂度:运行一个程序需要的内存大小
输出
ostream& operator << ( ostream& os, const vector< int > & v) {
if ( v. empty ( ) )
{
os << "[]" << endl;
return os;
}
os << "[" ;
for ( const auto & e : v)
{
os << e << " " ;
}
os << "\b]" << endl;
return os;
}
仿函数测试
#include <functional>
void test ( function< void ( vector< int > & ) > st)
{
vector< int > vec ( 16 ) ;
get_random ( vec) ;
cout << vec;
st ( vec) ;
cout << vec;
}
获取随机数
#include <random>
void get_random ( vector< int > & vec)
{
random_device r;
for ( auto & e : vec)
{
e = r ( ) % vec. size ( ) ;
}
}
在这里插入代码片
冒泡排序
#include <vector>
#include <algorithm>
using namespace std;
void bubble_sort ( vector< int > & vec)
{
for ( int i = 0 ; i < vec. size ( ) ; i++ )
{
for ( int j = i + 1 ; j < vec. size ( ) ; j++ )
{
if ( vec[ i] > vec[ j] )
{
int temp = vec[ i] ;
vec[ i] = vec[ j] ;
vec[ j] = temp;
}
}
}
}
选择排序
#include <algorithm>
void select_sort ( vector< int > & vec)
{
for ( int i = 0 ; i < vec. size ( ) ; i++ )
{
int min_num = i;
for ( int j = i + 1 ; j < vec. size ( ) ; j++ )
{
if ( vec[ j] < vec[ min_num] )
{
min_num = j;
}
}
swap ( vec[ min_num] , vec[ i] ) ;
}
}
插入排序
void insert_sort ( vector< int > & vec)
{
for ( int i = 0 ; i < vec. size ( ) ; i++ )
{
for ( int j = i; j > 0 ; j-- )
{
if ( vec[ j] < vec[ j - 1 ] )
swap ( vec[ j] , vec[ j - 1 ] ) ;
else
break ;
}
}
}
归并排序
void _merge ( vector< int > & vec, int left, int mid, int right)
{
vector< int > temp ( vec. begin ( ) + left, vec. begin ( ) + right + 1 ) ;
int leftport = left;
int rightport = mid + 1 ;
for ( int i = 1 ; i <= right; i++ )
{
if ( leftport > mid)
{
vec[ i] = temp[ rightport - left] ;
rightport++ ;
}
else if ( rightport > right)
{
vec[ i] = temp[ leftport - left] ;
leftport++ ;
}
else if ( temp[ leftport - left] < temp[ rightport - left] )
{
vec[ i] = temp[ leftport - left] ;
leftport++ ;
}
else
{
vec[ i] = temp[ rightport - left] ;
rightport++ ;
}
}
}
void _resolve ( vector< int > & vec, int left, int right)
{
if ( left >= right)
return ;
int mid = ( right - left) / 2 + left;
_resolve ( vec, left, mid) ;
_resolve ( vec, mid + 1 , right) ;
_merge ( vec, left, mid, right) ;
}
void mergr_sort ( vector< int > & vec)
{
_resolve ( vec, 0 , vec. size ( ) - 1 ) ;
}