java插入排序递归
我有一个数组,必须使用插入排序对它们进行排序。我试图使用compareTo方法来遍历数组,看看哪个更大。我遇到了一个问题,因为我试图用一个字符串引用一个数组索引,这个字符串显然不起作用(这是compareTo(一个[key]) 如有任何建议或提示,我们将不胜感激 这就是我目前所拥有的。这是一个好的开始吗?还是朝着正确的方向开始java插入排序递归,java,arrays,recursion,insertion,Java,Arrays,Recursion,Insertion,我有一个数组,必须使用插入排序对它们进行排序。我试图使用compareTo方法来遍历数组,看看哪个更大。我遇到了一个问题,因为我试图用一个字符串引用一个数组索引,这个字符串显然不起作用(这是compareTo(一个[key]) 如有任何建议或提示,我们将不胜感激 这就是我目前所拥有的。这是一个好的开始吗?还是朝着正确的方向开始 public void insertionSort() { insertionSort(a.length-1); }
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
;我希望publicinsertionSort
方法将要排序的对象作为参数。(我想如果你在自己的列表中定义这个类,它并没有那么糟糕,但听起来不像是用法)
同样地,我也不完全确定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)代码>