Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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_Algorithm_Sorting - Fatal编程技术网

Java 对数组递归调用排序

Java 对数组递归调用排序,java,arrays,algorithm,sorting,Java,Arrays,Algorithm,Sorting,我正在编写按顺序对数组排序的代码。我检查了一些排序和合并算法,但是我发现如果我只是遍历数组,比较每2个元素,交换它们,然后重复,直到数组被排序。 因此,如果array[I]>array[I++],交换,重复 到目前为止还不起作用。我还需要一个断点来避免堆栈溢出:我需要一些帮助 数组: 递归函数: 公共字符串sortThisArray(int[]数组,双计数器,双a) { int-swap0=0; int-swap1=0; 如果(a>1000) { 返回“到达终点”; } for(int i=0;

我正在编写按顺序对数组排序的代码。我检查了一些排序和合并算法,但是我发现如果我只是遍历数组,比较每2个元素,交换它们,然后重复,直到数组被排序。 因此,如果array[I]>array[I++],交换,重复

到目前为止还不起作用。我还需要一个断点来避免堆栈溢出:我需要一些帮助

数组:

递归函数:

公共字符串sortThisArray(int[]数组,双计数器,双a)
{
int-swap0=0;
int-swap1=0;
如果(a>1000)
{
返回“到达终点”;
}
for(int i=0;i数组[i++]
{
swap0=数组[i];
swap1=数组[i++];
数组[i++]=swap0;
数组[i]=swap1;
计数器=计数器++;
a=数组长度*计数器;
排序此数组(数组、计数器、a);
}
}

对于(int j=0;j您正在搜索的是递归冒泡排序算法

主要错误是将i++(每次递增i)与i+1混淆,i+1只是数组中i之后的位置,不递增。这样,就不需要使用double作为计数器,也不需要a变量。您只需要当前段的长度,如下所示:

import java.util.*;
public class RecursiveBubbleSort {

public static void main(String[] args) throws Exception {
    int[] newArray = new int[] {3,9,5,7,4,6,1};

sortThisArray(newArray, newArray.length);

    System.out.println("Sorted array : ");
    System.out.println(Arrays.toString(newArray));
}

public static int[] sortThisArray(int[] array, int n) {
    if (n == 1) {
        return array; //finished sorting
    }

    int temp;
    for (int i = 0; i < n-1; i++) {
        if (array[i+1] < array[i]) {
            temp = array[i];
            array[i] = array[i+1];
            array[i+1] = temp;
        }
    }
    return sortThisArray(array, n-1);
}

}
import java.util.*;
公共类递归BubbleSort{
公共静态void main(字符串[]args)引发异常{
int[]newArray=newint[]{3,9,5,7,4,6,1};
sortThisArray(newArray,newArray.length);
System.out.println(“排序数组:”);
System.out.println(Arrays.toString(newArray));
}
公共静态int[]sortThisArray(int[]数组,int n){
如果(n==1){
返回数组;//已完成排序
}
内部温度;
对于(int i=0;i
++运算符单独求值。因此,在i++的情况下,我们将读取i,然后将其增量为1。反过来,++i,将首先将增量应用于i,然后读取i。因此,当您要检查数组中的下一个元素时,
[i+1]
是您要找的。同样的道理,您能找出这条线有什么问题吗

counter = counter++;

我们甚至需要它吗?

i++增加i。当您可能想使用i+1时,您多次使用它。counter=counter++;什么都不做。它增加counter,然后将其分配回旧值。请看为什么不使用标准排序函数?我正在尝试解决时间复杂性,使用标准排序函数就是时间效率高,希望编译器足够聪明,可以删除尾部递归。否则,即使是中等大小的数组也会破坏堆栈。谢谢,这非常有用,我对代码进行了更改,现在可以工作了。排序算法不容易掌握,需要花更多的时间来理解。再次感谢您的经验拉纳多!
import java.util.*;
public class RecursiveBubbleSort {

public static void main(String[] args) throws Exception {
    int[] newArray = new int[] {3,9,5,7,4,6,1};

sortThisArray(newArray, newArray.length);

    System.out.println("Sorted array : ");
    System.out.println(Arrays.toString(newArray));
}

public static int[] sortThisArray(int[] array, int n) {
    if (n == 1) {
        return array; //finished sorting
    }

    int temp;
    for (int i = 0; i < n-1; i++) {
        if (array[i+1] < array[i]) {
            temp = array[i];
            array[i] = array[i+1];
            array[i+1] = temp;
        }
    }
    return sortThisArray(array, n-1);
}

}
counter = counter++;