开发者社区> 问答> 正文

归并排序没有成功,不知道哪里错了!

============================================================================
// Name        : Merge.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
 
 
#include <iostream>
using namespace std;
 
 
void  Merge(int array[], int p, int r);
 
 
int main() {
    int merge[10]={5, 3, 8, 9, 0, 1, 2, 4, 7, 6};
    Merge(merge, 0, 10);
 
 
 
 
    return 0;
}
 
 
void  Merge(int array[], int p, int r){
 
 
    int q = (r+p)/2;
 
 
    int n = q-p;
    int m = r-q;
 
 
    int left_array[n];
    int right_array[m];
 
 
    for(int i = 0; i < n; i++ ){
        left_array[i]=array[p+i];
    }
    for(int j = 0; j < m; j++){
        right_array[j] = array[q+j];
    }
 
 
    int i=0;
    int j=0;
 
 
    for(int k = 0; k < r; k++){
        if(left_array[i] <= right_array[j]){
            array[k] = left_array[i];
            i = i + 1;
        }
        else{
            array[k] = right_array[j];
            j = j + 1;
        }
 
 
    }
 
 
 
 
 
 
    for(int i = 0; i < r; i++){
        cout << array[i] << "   ";
    }
 
 
    //return 0;
}
 

展开
收起
爵霸 2016-06-08 10:44:39 1757 0
1 条回答
写回答
取消 提交回答
  • 有问题的地方是在merge函数里,修改过的代码如下,注释里已标出修改原因: void merge(int a[],int t[],int s,int m,int mid){ int mark,i,bak; //增加一个bak来备份mid的初始值 mark=s; bak=mid; //备份mid的初始值 while(s<=bak && (mid+1)<=m)//s<=mid被修正为s<=bak,因为mid在循环体里会自增,会导致有些元素进行了重复的比较和赋值 { if(a[s]<=a[mid+1]) { t[mark]=a[s]; printf("%d ",t[mark]); mark++; s++; } else { t[mark]=a[mid+1]; printf("%d ",t[mark]); mark++; mid++; } } if(s<=bak)//改用bak的值进行剩余元素的拷贝 { for(i=s;i<=bak;i++) //改用bak的值进行剩余元素的拷贝 { t[mark]=a[i]; printf("%d ",t[mark]); mark++; } } if((mid+1)<=m) { for(i=(mid+1);i<=m;i++) { t[mark]=a[i]; printf("%d ",t[mark]); mark++; } } }

    答案来源于网络

    2019-10-08 14:52:11
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载