java插入排序递归

java插入排序递归,java,arrays,recursion,insertion,Java,Arrays,Recursion,Insertion,我有一个数组,必须使用插入排序对它们进行排序。我试图使用compareTo方法来遍历数组,看看哪个更大。我遇到了一个问题,因为我试图用一个字符串引用一个数组索引,这个字符串显然不起作用(这是compareTo(一个[key]) 如有任何建议或提示,我们将不胜感激 这就是我目前所拥有的。这是一个好的开始吗?还是朝着正确的方向开始 public void insertionSort() { insertionSort(a.length-1); }

我有一个数组,必须使用插入排序对它们进行排序。我试图使用compareTo方法来遍历数组,看看哪个更大。我遇到了一个问题,因为我试图用一个字符串引用一个数组索引,这个字符串显然不起作用(这是compareTo(一个[key])

如有任何建议或提示,我们将不胜感激

这就是我目前所拥有的。这是一个好的开始吗?还是朝着正确的方向开始

 public void insertionSort() 
    { 
        insertionSort(a.length-1);
    } 



    private void insertionSort(int n)
    {
        String temp; 
        if(n <= 1)
        {
        //Do nothing, easiest case
        }

        else
        {
        for(int i = 1; i < a.length; i++)
        {
        int j;
        String key = a[i];

            while((j >= 0) && (a[i].compareTo(a[key]) > 0))
            {
            a[i+1] = a[i];
            j--;
            }
            a[i+1] = key;
        }   

        insertionSort(n-1);

        }
    } 
public void insertionSort()
{ 
插入排序(a.length-1);
} 
专用void insertionSort(int n)
{
字符串温度;
如果(n=0)和(a[i]。比较(a[key])>0)
{
a[i+1]=a[i];
j--;
}
a[i+1]=键;
}   
插入排序(n-1);
}
} 

只需将其更改为
a[j]。比较到(键)
(请注意,您要比较的是
a[j]
,而不是
a[i]
)。正如smas评论的那样,您还需要初始化
j

我的第一个建议是,如果您传入所需的参数,通常更容易理解方法。根本不清楚什么是
a
;我希望public
insertionSort
方法将要排序的对象作为参数。(我想如果你在自己的列表中定义这个类,它并没有那么糟糕,但听起来不像是用法)

同样地,我也不完全确定
n
应该是什么(可能是你知道的排序超出的索引),但你根本不在私有方法的主体中使用它,所以你只是在做同样的事情
n

您似乎也在交换
a
的元素,这在插入排序中不需要执行。这看起来更像是一种泡沫

首先尝试将该方法编写为伪代码(例如注释),以展示您的方法,然后用少量代码充实每个注释。这样做可以避免陷入细节的泥潭,通常概念上的错误会更明显,更容易避免。这可能看起来像:

public static int[] insertionSort(int[] input) {
    // Create the array to hold the results

    // Iterate through the contents of input and insert each one into
    // the result array in order (method call here)

    // return the result array
}

private void insertOneElement(int toInsert, int[] resultArray) {
    // Compare toInsert with first element of resultArray

    // etc.
}

按照以下步骤更换内环:

j = i - 1;  //initialize j!!!
String key = a[i];   //take value
while((j >= 0) && (a[j].compareTo(key) > 0)){//Compare with key!!!
     a[j+1] = a[j];
     j--;
}
a[j + 1] = key; //index is j here!!!!

“我有一个数组字符串”--你是说“一个字符串数组”,对吗?j应该在之前的某个地方初始化,而loopran在[i+1]=key处遇到数组越界异常。它应该是
a[j+1]=key
。同时删除递归。即删除
insertionSort(n-1)