在计算机科学课中,出现了这个合并排序的例子。即使“mergeSort()”函数没有返回任何内容,数组“array1”最终如何变化?我很困惑。我问老师,但他不确定。
其他人可以帮我吗?谢谢!
import java.util.Arrays;
public class MergeSort
{
public static void main(String[] args)
{
int[] array1 = {5, 3, 4, 1, 6, 2};
int[] array2 = {5, 6, 4, 8, 9, 7, 3, 1, 2};
System.out.print("First array: ");
System.out.println(Arrays.toString(array1));
// System.out.print("Second array: ");
// System.out.println(Arrays.toString(array2));
System.out.println();
// sort first array
mergeSort(array1);
// sort second array
// mergeSort(array2);
System.out.print("First array sorted: ");
System.out.println(Arrays.toString(array1));
// System.out.print("Second array sorted: ");
// System.out.println(Arrays.toString(array2));
}
/*
* Merge sort takes in an array and returns the same array, sorted.
*/
public static void mergeSort(int[] arr)
{
int[] temp = new int[arr.length];
mergeSortHelper(arr, 0, arr.length - 1, temp);
}
public static void mergeSortHelper(int[] arr, int from, int to, int[] temp)
{
// If the array length is greater than 1
if(to - from >= 1)
{
int mid = (from + to) / 2;
mergeSortHelper(arr, from, mid, temp);
mergeSortHelper(arr, mid + 1, to, temp);
merge(arr, from, mid, to, temp);
System.out.println(Arrays.toString(arr));
}
}
public static void merge(int[] arr, int from, int mid, int to, int[] temp)
{
int i = from; // track left array position
int j = mid + 1; // track right array position
int k = from; // track temp position
while(i <= mid && j <= to)
{
// If the element in the left subarray is less
// than the element in the right subarray it
// is next in the merged list
if(arr[i] < arr[j])
{
temp[k] = arr[i];
i++;
}
else
{
temp[k] = arr[j];
j++;
}
k++;
}
// We may have missed elements from either list
while(i <= mid)
{
temp[k] = arr[i];
i++;
k++;
}
while(j <= to)
{
temp[k] = arr[j];
j++;
k++;
}
// Copy over from temp to elements
for(k = from; k <= to; k++)
{
arr[k] = temp[k];
}
}
}
答案 0 :(得分:0)
mergeSort()
调用mergeSortHelper()
,调用merge()
。
merge()
更改了arr[k] = temp[k];
因此,mergeSort()
实际上会修改数组,尽管它通过调用修改数组的其他方法来实现。
答案 1 :(得分:0)
对于迟到的回复感到抱歉,我没有看到关于这篇文章的任何电子邮件,所以我认为没有人回复。
我应该澄清一下:我的老师应该教我们Java,他做了一些,但他也喜欢把重点放在有关编程的新闻上,比如“最近发现了一个安全漏洞苹果”等等。他是也很悠闲,不知道如何保持班级排队,所以基本上我班上的每一个人,但我(我是唯一对课堂感兴趣的人)在课堂上观看视频和玩游戏,从不做任何事家庭作业。我的老师非常悠闲,他没有惩罚任何人,所以我最终成为唯一一个对java有所了解的人。
他让我们为AP Java的代码HS做了一些事情,但我是唯一一个真正按时完成它的人,所以我无所事事,但在我的老师等待我的同时,在网站上查看不同的编码技术同学为几个班级做点什么。当我环顾四周时,我在mergesort上看到了一个小部分,并通过代码HS给出了这个例子。那是我问老师的时候。我猜他从未接受过非常多的Java教学,他不知道答案。哎呀,他甚至不记得抽象课是什么。
他是我学校唯一的老师。我认为明年他会变得更加严格,因为据我所知,他的低级计算机科学课实际上已经做了些什么。也许我已经给了他一点希望,那里有学生真正关心计算机科学。