Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将正数置于负数之前_Java_Arrays_Sorting_Recursion - Fatal编程技术网

Java 将正数置于负数之前

Java 将正数置于负数之前,java,arrays,sorting,recursion,Java,Arrays,Sorting,Recursion,我在网上找到了这个代码,它取了一个正数和负数的数组,然后重新排列数组,使所有负数都在正数之前。但每个数字的出现位置必须保持不变。例如,如果我有-25-9…,在有组织的数组中-2仍然必须是负数的第一个数,-9必须是负数的第二个数,5也必须是正数的第一个数 例如: 所以代码工作正常,但我想做的是改变它,使正数出现在负数之前 例如: 这是代码,如果你能帮我的话,我知道这不是很复杂,但我想不出来 //重新排列正片和负片的Java程序 //数组中的数字 公共阶级重组{ /*函数打印数组*/ 静态无效pri

我在网上找到了这个代码,它取了一个正数和负数的数组,然后重新排列数组,使所有负数都在正数之前。但每个数字的出现位置必须保持不变。例如,如果我有-25-9…,在有组织的数组中-2仍然必须是负数的第一个数,-9必须是负数的第二个数,5也必须是正数的第一个数

例如:

所以代码工作正常,但我想做的是改变它,使正数出现在负数之前

例如:

这是代码,如果你能帮我的话,我知道这不是很复杂,但我想不出来

//重新排列正片和负片的Java程序 //数组中的数字 公共阶级重组{ /*函数打印数组*/ 静态无效printArrayint[]A,整数大小{ 对于int i=0;i 公共静态无效字符串[]args{ int[]arr={1,7,-5,9,-12,15,-6,-8}; System.out.printlnArrays.tostringrearangeposnegar; // [-5, -12, -6, -8, 1, 7, 9, 15] } 公共静态int[]posnegint[]arr{ 返回IntStream.concat Arrays.streamarr//负数 .filteri->i<0, Arrays.streamarr//正 .filteri->i>=0 .托雷; } 如果要交换正子流和负子流,可以交换s:i<0和i>=0的部分


另请参见:

通过向posneg和merge方法添加谓词参数,可以轻松地对现有解决方案进行参数化,根据此参数,正值或负值将放置在数组的开头:

静态无效的posnegint[]arr,int l,int r,谓词p{ 如果l我认为一个快速而肮脏的方法是运行代码,找到分区点并交换两个组。保留当前代码,但添加3个步骤:反转正片子数组,反转负片子数组,反转整个数组。@Bohemian♦ 有没有一种方法可以让代码在负片之前放置正片?我想你说的是保留精确的设计,但在这个函数完成后交换两个子数组。我更希望在函数完成后,让函数以正确的方式对数组排序,而不做额外的更改。我不知道你是否明白。我的guess:将while循环条件从<0更改为>=0假设0被视为正数,则更好的答案是重新开始。此排序可以使用Arrays.sort和比较器实现,该比较器将所有负数视为相等,所有正数视为相等,负数视为小于正数。请注意需要整数[]而不是整数[].我喜欢你的解决方案,但我不熟悉你使用的谓词类。你能在没有这个东西的情况下让它工作吗?我只想让它工作,先放正,然后放负,我不需要两种可能性。如果你能编辑代码,我将不胜感激。我不需要迭代版本,它不需要eds是一个递归分治算法。@ChrisCosta,我提供了更新,尽管它有点琐碎。非常感谢,如果你理解了RebeasePosNeg函数的功能,你能给我一个简单的解释吗?因为我很难理解这段代码的作者到底做了什么。我想这是一个分治算法征服算法,但我不知道他是如何解决这个问题的,每次降低l和r的值。如果你能帮助我理解,我将非常感激。谢谢你已经做了的帮助。
Input: {1,7,-5,9,-12,15,-6,-8}
Output:{-5,-12,-6,-8,1,7,9,15}
Input: {1,7,-5,9,-12,15,-6,-8}
Output:{1,7,9,15,-5,-12,-6,-8}
int[] arr = {1,7,-5,9,-12,15,-6,-8};
int arr_size = arr.length;
rearrangePosNeg(arr, 0, arr_size - 1, (x) -> x > 0); // put positives first
printArray(arr, arr_size);
1 7 9 15 -5 -12 -6 -8 
int[] arr = {1,7,-5,9,-12,15,-6,-8};

System.out.println("iterative: " +  Arrays.toString(rearrange(arr, (x) -> x > 0)));
iterative: [1, 7, 9, 15, -5, -12, -6, -8]