为什么一位数组返回零?合并排序测试
why does a one-digit array return zero? mergesort testing
#include <iostream>
using namespace std;
void merge(int a[], int start, int pivot, int finish){
int *tmp = new int[finish - start +1] ;
int I = start ;
int J = pivot +1 ;
int K = 0 ;
while((I <= pivot)&& ( J <= finish) ){
if(a[I] < a[J]){
tmp[K] = a[I] ;
K++ ; I++ ;
}
else{
tmp[K] = a[J] ; K++ ; J++ ;
}
}
if(I <= pivot){
while(I <= pivot){
tmp[K++] = a[I++] ;
}
}
if( J<= finish){
while(J<= finish){
tmp[K++] = a[J++] ;
}
}
for(K = start ; K <= finish ; K++) a[K] = tmp[K-start] ;
delete []tmp ;
return ;
}
void mergesort(int a[], int start, int finish){
if(start < finish){
int pivot = (start + finish)/2 ;
mergesort(a,start, pivot) ;
mergesort(a, pivot+1, finish) ;
merge(a, start, pivot, finish) ;
}
}
int main(){
int test[] = {4} ;
mergesort(test,0, 1) ;
for(int i = 0 ; i < sizeof(test)/sizeof(int); i++) cout<<" * " << test[i] ;
cout<<endl ;
}
当我输出这个简单的测试时,它打印"* 0"。为什么为零?它从何而来?数组仅包含 4!
您已经编写了合并排序例程,使得start
和finish
都是数组中的有效位置,但是您已经使用 finish
作为"一个结束"的索引调用了该例程。
我想你的意思是打电话给mergesort(test, 0, 0);
0
可能来自不是有效索引的test[1]
,它实际上可能包含任何内容。 它恰好是小于4
的0
,因此您的4
将被移出数组的末尾。 这是未定义的行为。
没
关系,我想通了。通话时 测试[] = {4} ; 合并排序(测试,0,1) ;
它应该是"mergesort(test,0,0)"。原因是:参数"finish"应该是a.length-1。
test[] = {4} ;//只声明第一个元素尝试访问 test[45] , test[100] 会给出一些错误的数字 - 来自测试的"未知"部分。基本上,我希望开始和结束有效数字。test.len = 1 ,但它的索引为零,这就是为什么它本质上是从零到零 - 没有其他数字可以寻找;如果我尝试访问测试[1] - 它会得到一些蹩脚的未声明号码
相关文章:
- 使用C++程序合并排序没有得到正确的输出
- 用于合并排序的合并函数
- 合并排序不排序自创建数组类 c++
- 仅在大型阵列上出现合并排序分段错误
- C++合并排序可视化工具
- 没有输出的合并排序我做错了什么?
- 字符串上的合并排序上的 Seg 错误
- 使用向量在 c++ 中合并排序实现
- 我无法让我的合并排序实现运行
- 合并排序:分段错误核心转储
- 合并排序中的错误计数:计数反转
- C++ 多线程 - 与线程合并排序的算法替代
- C++中合并排序算法的奇怪行为
- 合并排序没有给我任何输出
- C++ 中的合并排序
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 在实现合并排序代码时无法计算所有反转
- 在C++中使用迭代器合并排序
- 运行合并排序递归算法时EXC_BAD_ACCESS错误
- 我的C++合并排序代码不起作用。我在这里错过了什么?