سلام
این یه تابعه که می خواد تعداد عناصری که توی یک آرایه به ترتیب بر عکس قرار دارند را پیدا کنه. حالا هدفش خیلی مهم نیست. لطفا این کد رو ببینین:
private void findInversions(int begin, int end, int count) {
if (end - begin < 1)
return;
int middle = (begin + end) / 2;
findInversions(begin, middle, count);
System.out.println("count: " + count + " CHERA????");
findInversions(middle + 1, end, count);
count = mergeAndCount(begin, middle, end, count);
}
private int mergeAndCount(int begin, int middle, int end, int count) {
int[] result = new int[end - begin + 1];
int aptr = begin;
int bptr = middle + 1;
for (int i = 0; i < result.length; i++) {
if (aptr <= middle && bptr <= end) {
if (numbers[aptr] < numbers[bptr]) {
result[i] = numbers[aptr];
aptr++;
}
else {
// (a[aptr], b[bptr]) is an inversion here
count++;
System.out.println("PAYDA SHOD: (" + numbers[aptr] + "," + numbers[bptr] + "). VALI COUNT MEGHDARESH GHALATE: " + count);
result[i] = numbers[bptr];
bptr++;
}
}
else if (aptr > middle) {
result[i] = numbers[bptr];
bptr++;
}
else if (bptr > end) {
result[i] = numbers[aptr];
aptr++;
}
}
for (int i = 0; i < result.length; i++) {
numbers[begin + i] = result[i];
}
return count;
}
من هم خود count رو به عنوان آرگومان پاس می دم و هم returnش می کنم. با توجه به این که جاوا خود اصل متغیر رو تغییر می ده (مگه نه؟) چرا مقدار count وقتی از اجراهای مختلف تابع بازگشتی بیرون می یایم همون مقدار قبلیشه و تغییر نکرده؟
ممنون
ویرایش: دوستان من از یکی از دوستام سوال کردم و ظاهرا اشتباه می کردم و int چون primitiveه کپی می شه و اصلش عوض نمی شه. ولی من نوع count رو به Integer هم تغییر دادم درست نشد. لطفا راهنمایی کنین.