我正在编写代码来按顺序对数组进行排序。我检查了一些用于排序和合并的算法,但是我发现如果我只是遍历数组并比较每 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/