递归中使用的C代码语句的等效java代码语句
下面的代码用C进行快速排序。我试图将相同的代码逻辑翻译成java。但是,我无法为“partition(&;arr[left+1],size-left-1);”编写等效的Java代码语句在下面的配分函数中。有人能帮忙吗
#include<stdio.h>
int main()
{
int arr[8]={4,8,1,6,3,7,2,5};
partition(arr,8);//Initial Calling of partition function
int i;
for(i=0;i<8;i++)
printf("%d ",arr[i]);
return 0;
}
void partition(int arr[],int size)
{
if(size<2)
return;
int pivot=arr[rand()%size];
int left=0,right=size-1,temp=0;
while(left<right)
{
while(arr[left]<pivot)
left++;
while(arr[right]>pivot)
right--;
temp=arr[left],arr[left]=arr[right],arr[right]=temp;//swapping values
}
//partitioning and recursive calling
partition(arr,left);
partition(&arr[left+1],size-left-1);//The problem is to write an equivalent code for this
//line in Java
}
# 1 楼答案
x参数指的是“pivot”值。在任何情况下,你都需要研究这个算法是如何工作的
# 2 楼答案
要去掉指针,需要指定start和end by参数。定义你的功能如下:
而不是:
做
# 3 楼答案
# 4 楼答案
C允许您使用指针来引用同一数组中的不同起点。Java没有。只能引用整个数组
但可以将起始索引添加为参数
# 5 楼答案
一种不需要处理指针的解决方案是如下更改标题:
您也可以尝试下面介绍的copyOf功能:
copyOf
但是你必须重新构建它,因为你正在制作副本,我怀疑它会不会太快
复制指定的数组,截断或填充false(如有必要),使副本具有指定的长度。对于在原始数组和副本中都有效的所有索引,这两个数组将包含相同的值。对于在副本中有效但在原件中无效的任何索引,副本将包含false。当且仅当指定的长度大于原始数组的长度时,此类索引才会存在。 参数: 原始-要复制的数组 newLength—要返回的副本的长度 返回: 原始数组的副本,用假元素截断或填充以获得指定的长度 抛出: NegativeArraySizeException-如果newLength为负值 NullPointerException-如果original为null 自: 1.6