合并排序没有给我任何输出
Merge Sort give me no output
我写了这个合并排序代码,灵感来自Deitel书(它使用类(。 当我编译代码(没有错误(时,我得到了未排序数组的输出,但第二个输出没有出现,就像它忽略了那部分代码一样。 程序正常终止。
这里的代码:
#include <iostream>
using namespace std;
void mergeSort(int*, int);
int main()
{
const int DIM = 20;
int vettore[DIM] = { 5, 10, 45, 214, 2, 14, 65, 87, 30, 21, 1, 24, 97,
35, 64, 82, 14, 32, 98, 2};
for(int i = 0; i < DIM; i++)
cout << vettore[i] << ' ';
cout << endl;
mergeSort(vettore, DIM);
for(int i = 0; i < DIM; i++)
cout << vettore[i] << ' ';
return 0;
}
void sortSubVector(int*, int, int, int); //prototipo
void mergeSort(int* vec, int dim)
{
sortSubVector(vec, dim, 0, dim-1);
}
void merge(int*, int, int, int, int, int); //prototipo
void sortSubVector(int* vec, int dim, int low, int high)
{
if((high - low) >= 1 )
{
int middle1 = (high - low) / 2;
int middle2 = middle1 + 1;
sortSubVector(vec, dim, low, middle1);
sortSubVector(vec, dim, middle2, high);
merge(vec, dim, low, middle1, middle2, high);
}
}
void merge(int* vec, int dim, int left, int middle1, int middle2, int right)
{
int leftIndex = left;
int rightIndex = middle2;
int tempIndex = left; //indice vettore temporaneo
int tempVector[ dim ]; //qui verranno posizionati gli elementi ordinati
while(leftIndex <= middle1 && rightIndex <= right)
{
if(vec[leftIndex] <= vec[rightIndex])
tempVector[tempIndex++] = vec[leftIndex++];
else
tempVector[tempIndex++] = vec[rightIndex++];
}
/* gli elementi di una metà sono stati tutti posizionati in ordine, ma
mancano gli elementi dell'altra metà */
if(leftIndex == middle2) //la prima metà è stata completata
while(rightIndex <= right)
tempVector[tempIndex++] = vec[rightIndex++];
else //la seconda metà è stata completata
while(leftIndex <= middle1)
tempVector[tempIndex++] = vec[leftIndex++];
/*il vettore temporaneo è pieno e ordinato. Copiamolo nel vettore
originale*/
for(int i = 0; i < dim; i++)
vec[i] = tempVector[i];
}
问题出在哪里? 请帮助我。 谢谢。
感谢您的评论。我发现了错误。 在排序子向量函数中,在中间 1 个变量中我计算(高 - 低(/2 但是在高 = 3 和低 = 2 的情况下,我获得了错误的索引,并且收到分段错误。我修复了它计算中间 1 =(低 + 高(/2,现在它可以工作了!
多亏了你,我学会了使用调试器来查找错误,非常感谢!
我很欣赏你的科学好奇心,但没有必要实现个人排序算法(除非你有很好的具体理由这样做(。
这是一个更像 c++ 的实现
#include <iostream>
#include <array>
#include <algorithm>
template <typename T>
void print(const T& array) {
for (const auto& item : array) {
std::cout << item << ' ';
}
std::cout << std::endl;
}
int main() {
const int DIM = 20;
std::array<int, DIM> vec = {5, 10, 45, 214, 2, 14, 65, 87, 30, 21, 1, 24, 97, 35, 64, 82, 14, 32, 98, 2};
print(vec);
std::sort(vec.begin(), vec.end());
print(vec);
return 0;
}
请考虑以下几点
- 使用标准库提供的容器,如
std::vector
和std::array
。 - 使用标准库提供的算法,例如
std::sort
. - 不要使用
using namespace std
- 鲍勃·马丁建议(在他的书
Clean Code
中(只使用英文命名变量。因此使用vec
而不是意大利vettore
。
我这样做是为了学习合并排序的工作原理,因为它需要通过我的考试。我知道存在标准库的算法,我从我的书中学到了这一点。我用了意大利名字,因为我是意大利人(是的,locic和愚蠢的东西(,但我必须学会像你说的那样只使用英语单词
相关文章:
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 代码编译没有任何输出,入门程序
- 可能我知道为什么这段代码没有给出任何输出吗?
- 什么是现实中的"endl"(或任何输出操纵器)?它是如何实现的,它如何与操作员<<一起工
- 为什么下面的Hello World程序在PowerShell上没有显示任何输出?同一程序在CMD上显示正确的输出
- 执行此代码时,它不显示任何输出.为什么?
- 合并排序没有给我任何输出
- 编译器没有显示错误,但我没有得到任何输出.怎么了?
- 当我从头文件和实现文件调用我的函数到我的主文件时,我没有得到任何输出
- 为什么我在链表中插入的代码没有得到任何输出?
- 后缀Expressrion的插图未显示任何输出
- 不显示任何输出
- VS Code C++程序在调试时不显示任何输出
- 当我使用继续时,程序不提供任何输出
- 该代码在 Dev-C++ 中没有给我任何输出
- Cereal 找不到任何输出序列化函数
- C++ 中的侵蚀函数不给出任何输出
- Ocamlopt不会产生任何输出,只有错误代码
- 当我从java代码执行C++时不显示任何输出
- 这个看似无害的代码不会产生任何输出