Java 递归合并排序优化空间
在我的任务中,我的任务是实现一个合并排序,该排序使用一个临时数组,其大小为原始数组的一半。我很难理解如何让它工作。它有时会起作用,但某些值会使它失去作用。在这方面的任何帮助或指导都会有所帮助。这是我目前的代码:Java 递归合并排序优化空间,java,recursion,mergesort,Java,Recursion,Mergesort,在我的任务中,我的任务是实现一个合并排序,该排序使用一个临时数组,其大小为原始数组的一半。我很难理解如何让它工作。它有时会起作用,但某些值会使它失去作用。在这方面的任何帮助或指导都会有所帮助。这是我目前的代码: public void sort(T[] items) { // Your sort should work without allocating any more memory than this... T[] temp = (T[]) new Comparable[
public void sort(T[] items) {
// Your sort should work without allocating any more memory than this...
T[] temp = (T[]) new Comparable[(items.length + 1) / 2];
mergesort(items, temp, 0, items.length - 1);
}
private void mergesort(T[] items, T[] temp, int left, int right) {
if (left == right) {
return; // Region has one record
}
int mid = ((right + left)) / 2; // Select midpoint
mergesort(items, temp, left, mid); // Mergesort first half
mergesort(items, temp, mid + 1, right);
merge(items,temp,left,mid,right);
}
/**
* Merge two sorted sub-arrays.
*/
private void merge(T[] items, T[] temp, int left, int mid, int right) {
int count = 0;
for (int i = left; i <= right; i++) {
if (count == temp.length) {
break;
}
temp[count] = items[i];// Copy subarray to temp
count++;
}
int i1 = 0;
int i2 = mid + 1;
for (int curr = left; curr <= right; curr++) {
if (i1 >= mid) { // Left subarray exhausted
items[curr] = items[i2++];
} else if (i2 > right) { // Right subarray exhausted
items[curr] = temp[i1++];
} else if (temp[i1].compareTo(items[i2]) <= 0) {
items[curr] = temp[i1++];
} else { // value
items[curr] = items[i2++];
}
}
}
公共作废排序(T[]项){
//您的排序应该可以正常工作,不会分配比此更多的内存。。。
T[]温度=(T[])新的可比[(items.length+1)/2];
合并排序(items,temp,0,items.length-1);
}
私有void合并排序(T[]项,T[]临时,左整数,右整数){
如果(左==右){
return;//区域有一条记录
}
int mid=((右+左))/2;//选择中点
合并排序(项目、临时、左、中);//合并排序前半部分
合并排序(项目、临时、mid+1、右侧);
合并(项目、临时、左、中、右);
}
/**
*合并两个已排序的子数组。
*/
私有无效合并(T[]项、T[]临时、左整数、中整数、右整数){
整数计数=0;
对于(int i=左;i右){//右子阵列
项目[curr]=临时[i1++];
}else if(临时[i1]。比较(项目[i2])