我正在编写代码来按顺序对数组进行排序。我检查了一些算法进行排序和合并,但是我发现如果我只是通过数组并比较每两个元素并交换它们并重复它直到数组被排序。 所以如果数组[I]> array [i ++],swap,repeat。
到目前为止还没有工作。我还需要一个断点来避免堆栈溢出:我需要一些帮助
阵列:
int[] newArray = new int[] {3,9,5,7,4,6,1};
SortArray s = new SortArray();
s.sortThisArray(newArray, 0, 0);
递归函数:
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";
}
}
答案 0 :(得分:0)
您要搜索的是递归冒泡排序算法。
主要的错误是让i ++(每次都增加i)与i + 1混淆,这只是i之后的数组中的位置,没有递增。然后,不需要使用double作为计数器,也不需要变量。您只需要当前段的长度,这样:
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);
}
}
答案 1 :(得分:0)
++运算符分别进行评估。所以在i ++的情况下,我们将读取i然后将其递增1.换句话说,++ i,首先将增量应用于i,然后读取i。因此,当您想要检查数组中的下一个元素时,[i+1]
就是您要查找的内容。用同样的理由,你能弄清楚这条线路有什么问题吗?
counter = counter++;
我们甚至需要吗?