我无法正确实现他的合并排序。调试它
I can't get his implementation of Merge Sort right. Debug it
在这里,我正在尝试使用辅助数组实现合并排序,类似于普林斯顿(Coursera(算法类的Bob Sedgewick的实现。但是我不能做这件事。它不会对数组进行排序。错误在哪里?
#include <iostream>
void MergeArr(int *first_arr,int lo, int mid, int hi){
int i, j, k;
int *aux_arr = new int[hi - lo + 1];
for(i = lo;i <= hi;i++){
aux_arr[i] = first_arr[i];
}
i = lo, j = mid + 1;
for(k = lo;k <= hi;k++){
if(i > mid){
first_arr[k] = aux_arr[j];
j++;
}
else if(j > hi){
first_arr[k] = aux_arr[i];
i++;
}
else if(aux_arr[i] < aux_arr[j]){
first_arr[k] = aux_arr[i];
i++;
}
else{
first_arr[k] = aux_arr[j];
j++;
}
k++;
}
delete(aux_arr);
}
void SortArr(int *main_arr, int lo_place, int hi_place){
if(lo_place >= hi_place)
return;
int mid = lo_place + (hi_place - lo_place)/2;
SortArr(main_arr, lo_place, mid);
SortArr(main_arr, mid + 1, hi_place);
MergeArr(main_arr,lo_place, mid, hi_place);
}
void display(int *show_arr, int show_size){
cout<<"nThe array: ";
for(int i = 0;i < show_size;i++)
cout<<show_arr[i]<<" ";
cout<<"n";
}
int main(){
int len_arr;
cout<<"nEnter the size: ";
cin>>len_arr;
int *arr = new int[len_arr];
cout<<"nEnter the elements: ";
for(int i = 0;i < len_arr;i++)
cin>>arr[i];
display(arr, len_arr);
SortArr(arr, 0, len_arr - 1);
cout<<"nAfter sorting the array: ";
display(arr, len_arr);
}
这是输出:输入大小:4
输入元素:4 3 2 1
阵列:4 3 2 1
对数组进行排序之后:
阵列:1 3 1 1
将感谢任何帮助。r。
我得到了它:-)
在合并函数中将主数组复制到辅助数组中时,索引中存在错误。
int size = hi - lo + 1;
int *aux_arr = new int[size];
for(i = 0, j = lo;i <= size;i++){
aux_arr[i] = first_arr[j++];
}
这是带有更正的代码。同样,随着辅助阵列索引从0到大小,我必须在最终合并循环中更改索引
i = 0, j = mid - lo + 1;
for(k = lo;k <= hi;k++){
if(i > mid - lo) first_arr[k] = aux_arr[j++];
else if(j > hi - lo) first_arr[k] = aux_arr[i++];
else if(aux_arr[i] < aux_arr[j]) first_arr[k] = aux_arr[i++];
else first_arr[k] = aux_arr[j++];
}
休息将保持不变。感谢您的评论,这确实有所帮助。: - (
相关文章:
- 使用C++程序合并排序没有得到正确的输出
- 用于合并排序的合并函数
- 合并排序不排序自创建数组类 c++
- 仅在大型阵列上出现合并排序分段错误
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- C++合并排序可视化工具
- 没有输出的合并排序我做错了什么?
- 字符串上的合并排序上的 Seg 错误
- 使用向量在 c++ 中合并排序实现
- 我无法让我的合并排序实现运行
- 合并链表上的排序
- 合并排序:分段错误核心转储
- 合并两个排序链表时运行时出错
- 在 C++ 中合并两个排序链表
- 合并排序中的错误计数:计数反转
- C++ 多线程 - 与线程合并排序的算法替代
- C++中合并排序算法的奇怪行为
- 合并排序没有给我任何输出
- C++ 中的合并排序
- C++:合并排序合并数组