| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1105 人关注过本帖, 1 人收藏
标题:C++ 归并排序问题?
只看楼主 加入收藏
hcs_xiaohan
Rank: 2
等 级:论坛游民
帖 子:40
专家分:23
注 册:2016-7-4
结帖率:91.67%
收藏(1)
 问题点数:0 回复次数:2 
C++ 归并排序问题?
程序的目的是把两个排序好的向量合并成一个排序的向量。
代码如下:

#include <iostream>
#include <vector>

using namespace std;
void Merge(vector<int> &, int, vector<int> &, int);

int main() {
    vector<int> A, B;
    for(int i = 0; i < 5; i++)
        A.push_back(i * 2 + 1);

    for(int i = 0; i < 7; i++)
        B.push_back(i * 2 +2);

    Merge(A, 5, B, 7);

    for(vector<int>::iterator p = A.begin(); p != A.end(); p++) */
         cout << (*p) << ",";
    cout << endl;

    return 0;
}


void Merge(vector<int> & A, int m, vector<int> & B, int n) {
    vector<int> AA;
    for(int i = 0; i < m; i++)
        AA.push_back(A[i]);
   
    for(int aa = 0, b = 0, a = 0; aa < m || b < n; ) {
        if(aa < m && (AA[a] <= B[b] || b >= n)) A[a++] = AA[aa++];
        if(b < n && (B[b] <= AA[a] || a >= m)) A[a++] = B[b++];
    }

}


编译报错segmentation default.

请看看是哪儿的问题?
搜索更多相关主题的帖子: include 
2016-12-14 16:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
根据你源代码修改的
程序代码:
#include <iostream>
#include <vector>
using namespace std;

vector<int> Merge( const vector<int>& a, const vector<int>& b );

int main( void )
{
    vector<int> a, b;
    for( int i=0; i<5; ++i )
        a.push_back( i*2+1 );
    for( int i=0; i<7; ++i )
        b.push_back( i*2+2 );

    vector<int> c = Merge( a, b );

    for( vector<int>::const_iterator itor=c.begin(); itor!=c.end(); ++itor )
        cout << *itor << ',';
    cout << endl;

    return 0;
}

vector<int> Merge( const vector<int>& a, const vector<int>& b )
{
    vector<int> c;
    c.reserve( a.size() + b.size() );

    for( size_t i=0, j=0; i+j!=a.size()+b.size(); )
    {
        if( i<a.size() && (j>=b.size() || a[i]<=b[j]) )
            c.push_back( a[i++] );
        else
            c.push_back( b[j++] );
    }

    return c;
}

2016-12-15 09:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
再看看用 C++ 怎么做

程序代码:
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;

int main( void )
{
    vector<int> a = { 1, 3, 5, 7, 9 };
    vector<int> b = { 2, 4, 6, 8, 10, 12, 14 };

    vector<int> c( a.size()+b.size() );
    merge( a.begin(), a.end(), b.begin(), b.end(), c.begin() );

    copy( c.begin(), c.end(), ostream_iterator<int>(cout,",") );
    cout << endl;

    return 0;
}

2016-12-15 09:02
快速回复:C++ 归并排序问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017477 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved