我试图实现合并排序,但得到的输出是相同的数组。这种合并排序给了我与输入相同的输出。请帮忙。我很确定这个实现是正确的,我试着调试它,但没有发现错误。
解决:我在比较helper[左]和helper[中]而不是helper right。谢谢帮助的人。
public class Sort {
public static void main(String[] args){
int arr[] = {3,5,6,9,0,2,4};
Sort sort = new Sort();
int i=0;
sort.MergeSort(arr);
for(i=0;i<arr.length;i++){
System.out.print(arr[i]);
}
}
private void MergeSort(int[] arr2) {
// TODO Auto-generated method stub
int helper[] = new int[arr2.length];
MergeSort(arr2,helper,0,arr2.length-1);
}
private void MergeSort(int[] arr2,int[] helper,int start, int end) {
if(start<end){
int mid = (start+end)/2;
MergeSort(arr2,helper,start,mid);
MergeSort(arr2,helper,mid+1,end);
Merge(arr2,helper,start,mid,end);
}else{
//do nothing
}
}
private void Merge(int[] arr2, int[] helper, int start, int mid, int end) {
// TODO Auto-generated method stub
int i;
for(i=start;i<=end;i++){
helper[i]=arr2[i];
}
i=start;
int left = start;
int right = mid+1;
while(left <= mid && right <= end){
if(helper[left] <= helper[mid]){
arr2[i] = helper[left];
left++;
}else{
arr2[i] = helper[right];
right++;
}
i++;
}
//move remaining of left to array
int remaining = mid-left;
int j;
for(j=0;j<=remaining;j++){
arr2[i+j]=helper[left+j];
}
}
}
我认为这是您的合并()函数缺少某个大小写。
//move remaining of left to array
int remaining = mid-left;
int j;
for(j=0;j<=remaining;j++){
arr2[i+j]=helper[left+j];
}
处理右子数组是否先耗尽,但不考虑左子数组是否先耗尽的情况(这可能会导致一些不寻常的结果)。我知道这不是您想问的,我会继续查看您的代码,看看我是否可以提供帮助。
编码快乐!如果有任何问题,请留言。
棘手的一个…:-)
您总是将左
处的元素与中
处的元素进行比较,而不是右
处的元素:
while(left <= mid && right <= end){
if(helper[left] <= helper[mid]){
应该是
while(left <= mid && right <= end){
if(helper[left] <= helper[right]){
可选,但更明确的是:
此外,正如马特所说,你没有赶上右臂的剩余值
while (left <= mid)
arr2[i++] = helper[left++];
while (right <= end) {
arr2[i++] = helper[right++];
编辑:将右臂接球标记为可选
尝试实现合并排序,下面是代码。如果有什么问题,请告诉我。我的合并功能是否有任何错误?无法指出我的代码中的确切问题。任何关于相同的帮助将不胜感激。 Merge函数用于合并两个排序的数组 递归调用Mergesort 打印函数来打印数组 主要功能
在C:\用户\戴尔\桌面\项目\my-app中创建新的React应用。 安装包。这可能需要几分钟。使用cra模板安装反应、反应-多姆和反应-脚本... NPM ERR!最大调用堆栈大小超过npm ERR!超出最大调用堆栈大小 NPM ERR!此运行的完整日志可以在npm ERR中找到!C:\用户\戴尔\AppData\漫游\npmcache_logs\2020-09-05T07_43_27_276
对于合并排序,我写了这样的代码:我已经测试了合并功能,工作正常。但是在mergeSort函数中,我不能处理数组。它返回与输入列表相同的列表。
下面是我保存在两个变量中的两个数据: 其代码: 我认为这与index_col=0参数有关。但我不知道在不保存它的情况下修复它,这并不重要,但我不得不这样做是一种烦恼。
本文向大家介绍Ruby实现的合并排序算法,包括了Ruby实现的合并排序算法的使用技巧和注意事项,需要的朋友参考一下 算法课的作业,利用分治法,合并排序。
我的两个方法中的操作是相同的,但是输入参数类型不同,那么我该如何优化这两个方法,似乎没有那么重复?因为它们的操作是相同的,但参数类型不同,我该怎么做才能使这段代码更优雅呢?