2015-02-12 2 views
1

Я объединил 2 основных класса в один, чтобы отобразить несортированные и отсортированные значения вставленного массива Строки. В приведенном коде использовались целые числа, и я изменил его, чтобы вместо этого использовать строки. У меня проблема с моим 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() 

Вот мой основной класс:

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 

А вот измененный класс сортировка выбором

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

И какова ошибка? Каковы значения 'a []' и 'nElems'? – gtgaxiola

+0

Ошибка: at java.lang.String.compareTo (Неизвестный источник) – joN

+0

Значения для [] - это 13 слов, которые были вставлены, а значения для nElems будут 0-12 – joN

ответ

0

Вы очень близки к решению

Вы должны сравнить temp против a[in-1] вместо a[in] против a[in+1]

Кроме того, необходимо проверить in всегда положительна на while loop для того, чтобы избежать IndexOutOfBoundsException

while(in > 0 && temp.compareTo(a[in-1]) < 0) 
{ 
1

Вам нужно сравнить [в] с [в-1] не а [в + 1]. В вашем свопе уже используются правильные элементы. С кодом, как есть, [в + 1] может превышать верхний предел вашего массива,

+0

он определенно перестал рушиться, спасибо. Тем не менее, он все еще испортит этот вид. В ближайшее время я опубликую более подробный результат. – joN

0

He re - мой выбор сортировки, который работает сейчас:

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() 
Смежные вопросы