java - Java中的合并排序越界异常
问题描述
在我的第二个 for 循环中出现错误。关于我做错了什么有什么建议吗?也许我没有使阵列足够大?
private static void mergeSort(int length, int[] arr) {
if (length>1)
{
int h = (int) Math.floor(length/2);
int m = length-h;
int[] U= new int[h];
int[] V=new int[m];
for(int i=0; i<h; i++){
U[i]=arr[i];
}
for(int i=h; i<length; i++){
V[i]=arr[i];
}
mergeSort( h , U);
mergeSort(m ,V);
merge(h , m , U , V, arr);
}
解决方案
for(int i=h; i<length; i++){
V[i]=arr[i];
}
您期望 V 在分配它之后的“长度”小于那个值。
int m = length-h;
int[] V=new int[m];
但我在评论中支持你学习一点调试技巧的建议。
推荐阅读
- excel - 为什么嵌套数组在达到上限时会出现excel?
- javascript - 如何在winston-papertrail 中自定义我的日志格式?
- sql - SQL 语法错误:“错误:靠近“字符”:语法错误”
- c++ - 冒泡排序双向链表
- node.js - Discord.JS 事件处理程序命令
- c - 错误:二进制 + 的操作数无效(有 'int *' 和 'int *')
- c - 如何声明固定大小元素的二维数组指针
- if-statement - 将大数分成多个较小的单位
- java - Java 程序 ArrayList:在循环中使用 Collections.shuffle()
- port - 我怎么知道谁在使用端口?