#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;

void bubbleSort(int [],const int, bool(*)(int,int));
void swap(int * const,int * const);
bool ascending(int ,int);
bool descending(int,int);
void print_arr(int [],int);
int main()
{
    int arr[]={3,42,1,100,689,2,24,45,36,47};
    int len=sizeof(arr)/sizeof(*arr);
    int flag=0;
    cout << "原数组为:" << endl;
    print_arr(arr,len);
    cout<<"请选择排序方法,升序(1),降序(2):";
    cin>>flag;
    if(flag==1){
       bubbleSort(arr,len,ascending);
    }
    else if(flag==2){
       bubbleSort(arr,len,descending);
    }
    else cout<<"输入有误!"<<endl;
    print_arr(arr,len);

    cout<<"done"<<endl;
    system("pause");
    return 0;
}
void bubbleSort(int arr[],const int len, bool(*sort_fun)(int,int))
{
    for(int i=0;i<len-1;++i){
        for(int j=0;j<len-1-i;++j){
            if(sort_fun(arr[j],arr[j+1]))
                swap(arr[j],arr[j+1]);
        }
    }
}
bool ascending(int a,int b){
    return a>b;
}
bool descending(int a,int b){
    return a<b;
}
void swap(int * const a,int * const b){
    int t=*a;
    *a=*b;
    *b=t;
}
void print_arr(int arr[],int len ){
    for(int i=0;i<len;++i){
        cout<<setw(5)<<right<<arr[i];
    }
    cout<<endl;
}