23-11-2010, 19:36
|
|
|
חבר מתאריך: 12.02.05
הודעות: 4,020
|
|
Java - מיון מיזוג
הבנתי את העיקרון של המיון-מיזוג, והחלטתי לנסות לממש את הפעולות בעצמי בלי להתסכל באלגוריתם שלו בויקיפדיה.
אני מקבל ArrayIndexOutOfBoundsException בזמן הריצה.
אם מישהו יכול לנסות למצוא את השגיאה שלי אני אודה לו מאוד.
(נ.ב - בבקשה אל תתייחס ליעילות של הקוד / אל תענו בתשובות כמו "למה לא עשית..." או "יותר נוח לעשות את זה ככה...", אני אבקש שתתייחסו רק למה שאני כתבתי)
תודה
קוד:
public class sort
{
public static int[] mergesort(int [] array)
{
if (array.length==1)
return array;
else
{
int middle = array.length/2;
int [] left = new int [middle];
for (int n=0 ; n<left.length ; n++)
left[n] = array[n];
int [] right = new int [array.length-middle];
for (int n=0 ; n<right.length ; n++)
right[n] = array[n+middle];
left = mergesort(left);
right = mergesort(right);
int [] result = merge(left,right);
return result;
}
}
public static int [] merge (int [] arr, int [] arr2)
{
int n=0;
int k=0;
int j=0;
int [] merged = new int[arr.length+arr2.length];
while (n<arr.length && k<arr2.length)
{
if (arr[n]<=arr2[k])
{
merged[j]=arr[n];
n++;
}
else
{
merged[j]=arr2[k];
k++;
}
j++;
}
while (n<arr.length)
{
merged[j]=arr[n];
n++;
j++;
}
while (k<arr2.length)
{
merged[j]=arr2[k];
k++;
j++;
}
return merged;
}
}
|