c++实现合并排序小调试问题


#include
using namespace std;
void MergeSort(int a[],int left,int right);
void Merge(int c[],int d[],int l,int m,int r);
void Copy(int a[],int b[],int left,int right);
main()
{
    cout<<"请输入一组数:"<int a[4],b[4];
    for(int i=0;i<4;i++)
    cin>>a[i];
    MergeSort(a,0,3);
    for(int i=0;i<4;i++)
    cout<[i]<<" ";
}
void MergeSort(int a[],int left,int right)
{
    static int b[4];
    if(left//至少有两个个元素 
    {
        int i=(left+right)/2;//取中点 
        MergeSort(a,left,i);
        MergeSort(a,i+1,right);
        Merge(a,b,left,i,right);//合并到数组b 
        Copy(a,b,left,right);//复制回数组a 
    }
}
void Merge(int c[],int d[],int l,int m,int r)//合并c[l:m]和c[m+1:r]到d[l:r] 
{
    int i=l,j=m+1,k=l;
    while((i<=m)&&(j<=r))
    {
        if(c[i]<=c[j])
        {
            d[k++]=c[i++];
        }
        else
        {
            d[k++]=c[j++];
        }
        if(i>m)
        {
            for(int p=j;p<=r;p++)
            d[k++]=c[p];
        }
        else
        {
            for(int q=i;q<=m;q++)
            d[k++]=c[q];
        }
    }
}
void Copy(int a[],int b[],int left,int right)
{
    for(int i=left;i<=right;i++)
    {
        a[i]=b[i];
        cout<[i]<

总觉得好像是b[]的定义有问题,如果两个数结果是对的,但是3个或者4个数就有问题,帮忙调试一下看看可以吗

class student 的定义中,数据成员 char sex; 后面需要加上一个分号。

class student 的定义中,成员函数 void display() 应该是 public 访问权限,但是没有显式地声明。

main() 函数中,应该先调用 stud1.set_value() 来赋初值,再调用 stud1.display() 来输出成员变量的值。

void Merge(int c[],int d[],int l,int m,int r) 函数中,如果 i 的值小于等于 m,应该用花括号把下面的两个 for 循环包起来,否则会出现数组越界的错误。

  • 这篇文章:c++学习笔记(基于b站黑马程序员) 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: C++核心编程(b站黑马程序员网课笔记)中的 封装意义二:类在设计时,可以把属性和行为放在不同的权限下,加以控制 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 访问权限有三种:

    1、public 公共权限

    2、protected 保护权限

    3、private 私有权限

    #include<iostream>
    using namespace std;
    //三种访问权限
    //公共权限 成员 类内可以访问,类外可以访问
    //保护权限 成员 类内可以访问,类外不能访问 儿子也可以访问父亲中的保护内容
    //私有权限 成员 类内可以访问,类外不能访问 儿子不可以访问父亲的私有内容
    class person
    {
        //公共权限
        public:
        string m_name; //姓名
        protected:
        string m_car;//汽车
        private:
        int m_password;//银行卡密码
        public:
        void func()
        {
            m_name="张三";
            m_car="拖拉机";//属于类内,所以可以访问
            m_password=123456;//也属于类内
        }
    };
    int main()
    {
        person p1;
        p1.m_name="李四";
        p1.m_car="奔驰";//这一行会出错 因为是protected 是保护权限内容,在类外访问不到
        p1.m_password=123;//这一行也会出错,因为是private 也是保护权限内容 也在类外
        
    }