C++|利用函式模板和函式指標實現任意型別排序(升序或降序)

怎麼進行降序

對於排序演算法,如果想要實現型別的泛化,就要使用函式模板,如果想要可以自由選擇升序或降序,可以考慮使用函式指標做為函式引數(函式指標做為函式引數也是其最主要的用途)。

程式碼:

C++|利用函式模板和函式指標實現任意型別排序(升序或降序)

執行效果:

C++|利用函式模板和函式指標實現任意型別排序(升序或降序)

附原始碼:

#include #include using namespace std;bool increaseInt( int x, int y ){ return(x < y);}bool decreaseInt( int x, int y ){ return(y < x);}bool increaseString( char *x, char *y ){ return(strcmp( x, y ) < 0);}bool decreaseString( char *x, char *y ){ return(strcmp( x, y ) > 0);}template void sort( T a[], int size, bool (*f)( T, T ) ){ bool flag; int i, j; for ( i = 1; i < size; ++i ) { flag = false; for ( j = 0; j < size - i; ++j ) { if ( f( a[j + 1], a[j] ) ) { T tmp = a[j]; a[j] = a[j + 1]; a[j + 1] = tmp; flag = true; } } if ( !flag ) break; }}int main(){ int a[] = { 3, 1, 4, 2, 5, 8, 6, 7, 0, 9 }, i; char *b[] = { “aaa”, “bbb”, “fff”, “ttt”, “hhh”, \ “ddd”, “ggg”, “www”, “rrr”, “vvv” }; sort( a, 10, increaseInt ); for ( i = 0; i < 10; ++i ) cout << a[i] << “\t”; cout << endl; sort( a, 10, decreaseInt ); for ( i = 0; i < 10; ++i ) cout << a[i] << “\t”; cout << endl; sort( b, 10, increaseString ); for ( i = 0; i < 10; ++i ) cout << b[i] << “\t”; cout << endl; sort( b, 10, decreaseString ); for ( i = 0; i < 10; ++i ) cout << b[i] << “\t”; cout << endl; cin。get(); return(0);}-End-