我将2个主要类合并为一个,以显示插入的数组字符串的未排序和排序值。给出的代码是使用整数,我改为将其改为字符串。我的insertSort()有问题。与线的比较导致它崩溃,我无法弄清楚为什么!
public void insertionSort()
{
int in, out;
for(out=1; out<nElems; out++) // out is dividing line
{
String temp = a[out]; // remove marked item
in = out; // start shifts at out
System.out.println(a[in]);
--->while(a[in].compareTo(a[in+1])>0 ) // until one is smaller,
{
a[in] = a[in-1]; // shift item to right
--in; // go left one position
}
a[in] = temp; // insert marked item
} // end for
} // end insertionSort()
这是我的主要课程:
class SortApp
{
public static void main(String[] args)
{
int maxSize = 100; // array size
ArraySel arr;//reference to ray1--> selection sort
ArrayIns arr2;// reference to array2--> insertion sort
arr = new ArraySel(maxSize); // create the array
arr2 = new ArrayIns(maxSize);
arr.insert("hello"); //insert words into the array
arr.insert("this");
arr.insert("is");
arr.insert("a");
arr.insert("random");
arr.insert("weird ");
arr.insert("sentence");
arr.insert("that");
arr.insert("does");
arr.insert("not");
arr.insert("make");
arr.insert("any");
arr.insert("sense");
arr2.insert("hello");
arr2.insert("this");
arr2.insert("is");
arr2.insert("a");
arr2.insert("random");
arr2.insert("weird ");
arr2.insert("sentence");
arr2.insert("that");
arr2.insert("does");
arr2.insert("not");
arr2.insert("make");
arr2.insert("any");
arr2.insert("sense");
arr.display(); // display items
arr2.display();
arr.selectionSort();//sort the 2 arrays
arr2.insertionSort();
arr.display(); // display them again
arr2.display();
} // end main()
} // end class SelectSortApp
这是更新的selectionSort类
public void selectionSort()
{
int out, in, min;
for(out=0; out<nElems-1; out++) // outer loop
{
min = out; // minimum
for(in=out+1; in<nElems; in++) // inner loop
if((a[in].compareTo(a[in-1])>0 )) // if min greater,
min = in; // we have a new min
swap(out, min); // swap them
答案 0 :(得分:1)
你需要比较[in]和[in-1]而不是[in + 1]。您的交换已使用正确的元素。使用代码,[in + 1]可以超出数组的上限,
答案 1 :(得分:0)
你真的很接近解决方案
您应该比较temp
与a[in-1]
而不是a[in]
与a[in+1]
另外,您需要检查in
上while loop
是否始终为正,以避免IndexOutOfBoundsException
while(in > 0 && temp.compareTo(a[in-1]) < 0)
{
答案 2 :(得分:0)
这是我的选择排序现在有效:
public void selectionSort() {
int out, in, min;
for(out=0; out<nElems-1; out++) // outer loop
{
min = out; // minimum
for(in=out+1; in<nElems; in++) // inner loop
if((a[in].compareTo(a[min])<0 )) // if min greater,
min = in; // we have a new min
swap(out, min); // swap them
} // end for(out)
} // end selectionSort()