多功能冒泡排序 函数指针

#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;

}

你可能感兴趣的:(冒泡排序)