Java 使用字符串进行插入排序
我将两个主要类合并为一个,以显示插入数组字符串的未排序和排序值。给出的代码使用整数,我改为使用字符串。我的insertionSort()有问题。比较线导致它崩溃,我不知道为什么Java 使用字符串进行插入排序,java,arrays,string,insertion-sort,Java,Arrays,String,Insertion Sort,我将两个主要类合并为一个,以显示插入数组字符串的未排序和排序值。给出的代码使用整数,我改为使用字符串。我的insertionSort()有问题。比较线导致它崩溃,我不知道为什么 public void insertionSort() { int in, out; for(out=1; out<nElems; out++) // out is dividing line { String temp = a[out]; // r
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()
这是更新后的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
public void selectionSort()
{
int out,in,min;
对于(out=0;out您需要将[in]与[in-1]而不是[in+1]进行比较。您的交换已经使用了正确的元素。按原样编码,[in+1]可能会超出数组的上限,您非常接近解决方案
您应该比较temp
vsa[in-1]
而不是a[in]
vsa[in+1]
此外,您还需要检查中的在while循环中始终为正值,以避免索引自动边界异常
while(in > 0 && temp.compareTo(a[in-1]) < 0)
{
while(in>0&&temp.compareTo(a[in-1])<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()
public void selectionSort(){
int out,in,min;
对于(out=0;out,错误是什么?a[]
和nElems
的值是什么?错误是:at java.lang.String.compareTo(未知源)a[]是插入的13个单词,nElems的值是0-12,整个错误是什么?这是我的主要类:它肯定停止崩溃了,谢谢。但是,它仍然在混乱排序。我很快会发布更深入的结果。
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()