Java 合并排序到位
我正在研究一种合并排序方法,该方法在不分配额外内存的情况下对元素进行就地排序。然而,它现在还不能工作,我想知道是否有人可以帮助我,因为我知道这是一个相对简单的操作。先谢谢你 我的合并排序方法:Java 合并排序到位,java,merge,mergesort,Java,Merge,Mergesort,我正在研究一种合并排序方法,该方法在不分配额外内存的情况下对元素进行就地排序。然而,它现在还不能工作,我想知道是否有人可以帮助我,因为我知道这是一个相对简单的操作。先谢谢你 我的合并排序方法: RegisterClass[] runMergeSort() { RegisterClass[] mergeSorted = new RegisterClass[capacity]; for (int counter = 0; counter < si
RegisterClass[] runMergeSort()
{
RegisterClass[] mergeSorted = new RegisterClass[capacity];
for (int counter = 0; counter < size; counter++)
{
mergeSorted[counter] = registerArray[counter];
}
runMergeSortHelper(mergeSorted, 0, size - 1);
return mergeSorted;
}
RegisterClass[]runMergeSort()
{
RegisterClass[]合并排序=新的RegisterClass[容量];
用于(int计数器=0;计数器<大小;计数器++)
{
合并排序[计数器]=寄存器阵列[计数器];
}
运行合并排序器(合并排序,0,大小-1);
返回并排序;
}
使用递归的My helper方法:
private void runMergeSortHelper(RegisterClass[] workingArray,
int lowIndex,
int highIndex)
{
int midIndex = (lowIndex + highIndex) / 2;
if (lowIndex < highIndex)
{
runMergeSortHelper(workingArray, lowIndex, midIndex);
runMergeSortHelper(workingArray, midIndex+1, highIndex);
runMerge(workingArray, lowIndex, midIndex, highIndex);
}
}
private void runMergeSortHelper(注册表类[]工作阵列,
int低指数,
整数(高索引)
{
int midIndex=(低指数+高指数)/2;
if(低指数<高指数)
{
runMergeSortHelper(工作阵列、低索引、midIndex);
runMergeSortHelper(工作阵列,midIndex+1,高索引);
runMerge(工作阵列、低索引、中索引、高索引);
}
}
最后是我的合并方法,它应该把所有的事情都整理好,但是,它只做了一部分
private void runMerge(RegisterClass[] workingArray,
int lowIndex,
int midIndex,
int highIndex)
{
int counterJay = midIndex;
int counterAye = lowIndex;
int counterKay = lowIndex - 1;
while (counterAye < midIndex && counterJay <= highIndex)
{
counterKay++;
if (workingArray[counterAye].compareTo(workingArray[counterJay]) <= -1)
{
counterAye++;
}
else
{
swapValues(workingArray, counterAye, counterJay);
counterJay++;
counterAye++;
}
}
while (counterAye < midIndex)
{
counterKay++;
swapValues(workingArray, counterAye, counterKay);
counterAye++;
}
while (counterJay <= highIndex)
{
counterKay++;
swapValues(workingArray, counterJay, counterKay);
counterJay++;
}
}
private void runMerge(RegisterClass[]工作阵列,
int低指数,
int midIndex,
整数(高索引)
{
int counterJay=midIndex;
int counterAye=低指数;
int counterKay=低指数-1;
while(counterAye
当发现右侧的元素小于左侧的元素时,需要右旋转阵列的该部分以将右侧元素放置到位
在不使用更复杂的实现的情况下,可以通过扫描右侧的k=前导元素数小于左侧的当前元素数,然后按k个元素向右旋转来进行小优化。对于随机数据,这不会有多大帮助,但对于反向排序的数据,这会有很大帮助。为什么不使用using heapsort?这是一个课堂作业,必须使用这种类型:p这很有帮助。我找到了其他资源,我相信我可以用它来完成。谢谢。