Java 使用字符串进行插入排序

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

我将两个主要类合并为一个,以显示插入数组字符串的未排序和排序值。给出的代码使用整数,我改为使用字符串。我的insertionSort()有问题。比较线导致它崩溃,我不知道为什么

 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
vs
a[in-1]
而不是
a[in]
vs
a[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()