合并排序输出问题
Merge sort output issue
我正试图通过递归对合并排序进行编码。然而,我没有按正确的排序顺序得到输出。请更正我的代码,并告诉我有关错误的详细信息。程序从用户那里获取元素和元素的数量。根据数据,程序应该按排序顺序给出元素。代码如下。
#include <iostream>
#include <cstdio>
#define max 20
using namespace std;
int data[max];
int nw[max];
void mergeparts(int, int, int);
void merge_sort(int low, int high){
int mid;
if(low<high){
mid=(low+high)/2;
merge_sort(low, mid);
merge_sort(mid+1, high);
mergeparts(low, mid, high);
}
}
void mergeparts(int low, int mid, int high){
for(int i=low; i<high; i++){
nw[i] = data[i];
}
int i = low;
int j = mid+1;
int k = low;
while((i <= mid)&&(j <= high)){
if(nw[i]<=nw[j]){
data[k]=nw[i];
i++;
}
else{
data[k]=nw[j];
j++;
}
k++;
}
while(i <= mid){
data[k] = nw[i];
k++;
i++;
}
while(j <= high){
data[k] = nw[j];
k++;
j++;
}
for(int i=low; i<high; i++){
data[i] = nw[i];
}
}
int main(){
int n;
cout<<"Enter the number of elements"<<endl;
cin>>n;
cout<<"Enter the "<<n<<" numbers."<<endl;
for(int i=0; i<n; i++){
cin>>data[i];
}
cout<<"The unsorted list is: "<<endl;
for(int i=0; i<n; i++){
printf("%dt",data[i]);
}
cout<<endl;
merge_sort(0,n+1);
cout<<"The sorted list is: "<<endl;
for(int i=0; i<n; i++){
printf("%dt",data[i]);
}
return 0;
}
正如您在评论中所写的,您的代码与本文中的代码不同。关键区别在于合并功能。
如果你仔细检查你的代码,你会注意到你的代码中有一些部分可能会改变数据数组,而不会保存它的当前状态;例如:
while(i <= mid){
data[k] = nw[i];
k++;
i++;
}
在一个有4个元素的数组上试用它,例如5、6、4、2,你会注意到一些原始数组成员不会出现在输出数组中。
您没有提供有关开发环境的信息,但大多数开发环境都内置了调试器。使用调试器,您最终会解决问题。或者重读这篇文章,重新编写算法代码。
祝你好运。
(此外,在未来,试着对问题标题更具体一点,并试着提供一些关于问题的额外信息,比如一些例子。这里的人希望提供帮助,但并不是每个人都有足够的时间阅读问题、编译或调试代码。如果你更具体,可能有人只需阅读你的问题就知道答案,而无需进一步调查)
相关文章:
- 可能我知道为什么这段代码没有给出任何输出吗?
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 为什么带有逻辑和运算符以及增量运算符的 c++ 程序给出的输出与预期不同?
- C++向量排序给出0作为输出
- 奇怪的数字随机出现在输出中.(C++)
- 如何从Visual Studio中的给出.pyd输出中构造Python代码
- 我将 c++ 矢量数据集转换为 c 数组.我将相同的数据集传递到一个应该给出相同输出的函数中
- 向量<对<双精度,双精度>>给出问题
- 为什么这段代码给出的输出与预期不同?
- C 反向一个不给出预期输出的数组
- 矢量在超出边界时给出0作为输出
- 我很确定我犯了一个愚蠢的错误,但是这段代码给出的输出太长而无法阅读
- C++ 中的侵蚀函数不给出任何输出
- 为什么字符串变量"sum"不存储任何数据,程序不给出任何输出
- 输入层类型:图像数据在窗口咖啡cpp中给出空白输出
- 在队列中,插入和删除后,被删除的元素也会出现在输出中.为什么
- 服务器未收到UDP数据包,花费数小时试图找出问题所在
- 程序给出 0 作为输出 (C++)
- C++ 输出找出问题
- 在成功运行10小时后,在发布模式下从windows应用程序中获得异常,如何检测出问题