編寫一個程序,讀取5個不同的整數。並把它們在陣列中的data[5]。然後將排序的數組升序和降序排列,該程序必須不改變原數組或創建任何其他整型數組。要解決這個程序需要兩個指針數組。第一個指針數組重新排列,使其指向順序遞增的數據。 第二個指針數組重新排列,使其指向在遞減?

2 個解答

評分
  • 5 年前
    最佳解答

    #include<iostream>

    #include<queue>

    #include<map>

    using namespace std;

    template<typename X>

    struct cmpA{

    bool operator()(const X*a,const X*b){ return *a<*b;}

    };

    template<typename X>

    struct cmpB{

    bool operator()(const X*a,const X*b){ return *a>*b;}

    };

    int main(int argc, char* argv[]) {

    const int n=5;

    std::queue<int> qint;

    std::map<int*,int,cmpA<int> > ma;

    std::map<int*,int,cmpA<int> >::iterator mai;

    std::map<int*,int,cmpB<int> > mb;

    std::map<int*,int,cmpB<int> >::iterator mbi;

    int a[n],i;

    for(i=0;i<n;++i){

    cin>>a[i];

    ma.insert(std::pair<int*,int>(&a[i],a[i]));

    mb.insert(std::pair<int*,int>(&a[i],a[i]));

    }

    for(cout<<"ascending order: ",mai=ma.begin();mai!=ma.end();++mai) cout<<mai->second<<' ';cout<<endl;

    for(cout<<"descending order: ",mbi=mb.begin();mbi!=mb.end();++mbi) cout<<mbi->second<<' ';cout<<endl;

    for(i=0,cout<<"original: ";i<n;++i)cout<<a[i]<< ' '; cout<<endl;

    ma.erase(ma.begin(), ma.end());

    mb.erase(mb.begin(), mb.end());

    return 0;

    }

    // test

    test$ vim ayy.cpp

    test$ g++ ayy.cpp -o ayy -Wall -O3

    test$ ./ayy

    2

    4

    3

    5

    1

    ascending order: 1 2 3 4 5

    descending order: 5 4 3 2 1

    original: 2 4 3 5 1

    test$

  • 匿名使用者
    5 年前

    可以用c++的方式嗎?

還有問題?馬上發問,尋求解答。