如果我将索引变量更改为零,并且合并函数中的k = 0,则获得合并排序的错误结果
Getting wrong results for merge sort if i change index variable to zero and k=0 in merge function
#include<bits/stdc++.h>
#define size 100
using namespace std;
void merge(int a[],int,int,int);
void merge_sort(int a[],int,int);
main(){
int a[size],i,n;
cout<<"Enter the no of elements in the array: ";
cin>>n;
for(i=0;i<n;i++){
cin>>a[i];
}
merge_sort(a,0,n-1);
cout<<"nThe sorted array is: ";
for(i=0;i<n;i++){
cout<<a[i]<<" ";
}
}
void merge(int a[],int l,int m,int r){
int i=l,j=m+1,index=1,temp[size],k;//HERE
while((i<=m) && (j<=r)){
if(a[i]<a[j]){
temp[index]=a[i];
i++;
}
else{
temp[index]=a[j];
j++;
}
index++;
}
if(i>m){
while(j<=r){
temp[index]=a[j];
j++;
index++;
}
}
else{
while(i<=m){
temp[index]=a[i];
i++;
index++;
}
}
for(k=1;k<index;k++){//HERE
a[k]=temp[k];
}
}
void merge_sort(int a[],int l,int r){
int m;
if(l<r){
m=(l+r)/2;
merge_sort(a,l,m);
merge_sort(a,m+1,r);
merge(a,l,m,r);
}
}
例如,如果n = 5
输入:5 8 7 1 4
输出:1 4 5 7 8
但是,如果k = 0且索引= 0
输出为1 1 4 4 8
我要做的就是访问temp数组和数组a,这是零索引合并的函数的参数。
如果取索引和k = 1,为什么数组不是溢出。
任何洞察力都会有所帮助。谢谢!
问题在于您将值从temp
复制到a
。正确的代码应该看起来像这样(索引应从0开始(:
for(k=0;k<index;k++){//HERE
a[l+k]=temp[k];
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 使用C++程序合并排序没有得到正确的输出
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 如果我将索引变量更改为零,并且合并函数中的k = 0,则获得合并排序的错误结果
- 多线程合并选项的奇怪结果
- 输出结果时如何将参数化测试合并为一个
- 将cv::Mat A的每个成员与cv::Mat B合并,以创建一个cv::Mat C,结果为[A(x,y),B(x,y)
- 合并两个文本文件会产生奇怪的结果
- 线程合并排序给出无效结果
- 如何合并2个std::映射,并在第三个映射中输出结果
- C++中合并排序实现的特殊行为,排序后的结果不应该在适当的位置
- 运行合并排序实现时的奇怪结果
- 如何有效地合并来自TBB线程的结果