我的合并排序程序在Java中显示了一个越界数组
我正在学习Java,我制作了这个合并排序程序,但是它抛出了一个异常我的合并排序程序在Java中显示了一个越界数组,java,arrays,algorithm,indexoutofboundsexception,mergesort,Java,Arrays,Algorithm,Indexoutofboundsexception,Mergesort,我正在学习Java,我制作了这个合并排序程序,但是它抛出了一个异常ArrayOutOfBound。我犯了什么错 我还在array.length或array.length-1中使用此代码,但这两种情况都失败了。我的代码似乎不接受数组的长度 //分割数组--- //用于合并阵列 void merge(int a[], int lb, int mid, int ub) { int i = lb; int j = mid + 1; int k = lb; int b[]
ArrayOutOfBound
。我犯了什么错
我还在array.length
或array.length-1
中使用此代码,但这两种情况都失败了。我的代码似乎不接受数组的长度
//分割数组---
//用于合并阵列
void merge(int a[], int lb, int mid, int ub) {
int i = lb;
int j = mid + 1;
int k = lb;
int b[] = {};
while (i <= mid && j <= ub) {
if (a[i] < a[j]) {
b[k] = a[i];
i++;
} else {
b[k] = a[j];
j++;
}
k++;
}
if (i > mid) {
while (j <= ub) {
b[k] = a[j];
j++;
k++;
}
} else {
while (i <= mid) {
b[k] = a[i];
i++;
k++;
}
}
System.out.println("Your Sorted Array is: ");
for (int ele : b) {
System.out.print(ele + " ");
}
}
您的
合并方法中存在多个问题:
- 您不分配临时数组
b
。你应该写intb[]=newint[ub-lb+1]代码>
- 临时数组中的索引
k
应初始化为0
,而不是lb
- 您应该将临时数组的内容复制回
a
- 打印已排序的切片仅用于调试
以下是修改后的版本:
void合并(int a[],int lb,int mid,int ub){
int b[]=新的int[ub-lb+1];
int i=磅;
int j=mid+1;
int k=0;
while(ij首先:请使用变量的实际名称。这几乎不可读,而且只是一种简单的合并排序。这也使其他人更容易帮助您。@ArvindKumarAvinash:不,j@AshishVerma:您可以通过单击分数下方的灰色复选标记来接受其中一个答案。
static void ActualArray(int a[]) {
System.out.println("----!!!Merge Sort!!!----");
System.out.println("Your Array is: ");
for (int i : a) {
System.out.print(i + " ");
}
System.out.println("\n");
}
void merge(int a[], int lb, int mid, int ub) {
int i = lb;
int j = mid + 1;
int k = lb;
int b[] = {};
while (i <= mid && j <= ub) {
if (a[i] < a[j]) {
b[k] = a[i];
i++;
} else {
b[k] = a[j];
j++;
}
k++;
}
if (i > mid) {
while (j <= ub) {
b[k] = a[j];
j++;
k++;
}
} else {
while (i <= mid) {
b[k] = a[i];
i++;
k++;
}
}
System.out.println("Your Sorted Array is: ");
for (int ele : b) {
System.out.print(ele + " ");
}
}
public static void main(String args[]) {
int arr[] = { 25, 16, 45, 17, 84, 61 };
ActualArray(arr);
MergeSort obj = new MergeSort();
obj.divide(arr, 0, arr.length - 1);
}