java - 排序数组 - 递归调用

标签 java arrays algorithm sorting

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

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

Array:

    int[] newArray = new int[] {3,9,5,7,4,6,1};

    SortArray s = new SortArray();

    s.sortThisArray(newArray, 0, 0);

Recursive function:

public String sortThisArray(int[] array, double counter, double a)
{
    int swap0 = 0; 
    int swap1 = 0; 

    if (a > 1000)
    {
        return "reached the end" ; 
    }

    for (int i =0; i<array.length; i++)
    {
        if (array[i] > array[i++])
        {
            swap0 = array[i];
            swap1 = array[i++];
            array[i++] = swap0; 
            array[i] = swap1; 

            counter = counter++; 
            a = array.length * counter; 

            sortThisArray (array, counter, a); 
        }
    }

    for (int j = 0; j<array.length ; j++)
    {
        System.out.println(array[j]);
    }
    return "completed"; 
}

最佳答案

您正在搜索的是递归冒泡排序算法。

主要错误是将 i++(每次递增 i)与 i+1 混淆,i+1 只是数组中 i 之后的位置,没有递增。这样counter就不用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);
}

}

关于java - 排序数组 - 递归调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50626061/

相关文章:

java - 如何从一个restful web服务中获取一些数据,并将其保存到数据库中?

java - 带有 Jackson 的自定义 JSON 字段作为响应

javascript - 如何从特定比例的数组中选择一个随机值?

algorithm - 图的中心点

python - 假设一个数组只包含两种元素,如何快速找到它们的边界?

algorithm - 寻找让机器人在房子里定位自己的方法

java - 使用java生成带有特定DTD声明的XML

java - 将数据从 Android 应用程序传递到 Java 程序

c++ - 向大数组减去或添加常量

c - 仅使用指针横向打印数组(转置)