0

並べ替えのすべてのステップを印刷することが可能であると思っていました。これが私のコードです: ご覧のとおり、リンクされたリストを渡し、i の値を配列にコピーして、ソート作業を容易にし、ソートされた配列を別のテキスト ファイルに書き込みます。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Insertion 
{
    public void Sort (LinkedList listIn, int size) throws Exception
    {
        String[] insArray = new String[size] ;
        String textContent = null ;
        File outputFile ;

        //copy the list values in the array
        for (int i = 0 ; i < size ; i++)
        {
             insArray [i] = listIn.get(i).printNode();
        }

        Stopwatch timer = new Stopwatch().start(); 

        //Insertion Sort
        for (int i = 1; i < size; i++)
            for (int j = i; j > 0; j--)
            {
                if (insArray[j-1].compareToIgnoreCase(insArray[j]) > 0)
                {
                    replace(insArray, j, j-1);

                }
            }

         timer.stop();   

         do
            {
                outputFile = new File("[Insertion] Sorted Entries.txt") ;

                    if(!outputFile.exists())
                    {
                        outputFile.createNewFile ();                    
                        System.out.println("Sorted file created.txt");
                        System.out.println("");
                    }
                    else
                    {
                        System.out.println("File Updated.");
                    }

            }while (!outputFile.exists()) ;

        try
            {

            //the "true" argument sets the FileWriter to append mode so that is does not overwrite the first line
                BufferedWriter out = new BufferedWriter(new FileWriter("[Insertion] Sorted Entries.txt", true));
                for (int i = 0 ; i < size ; i++)
                {
                    textContent = (insArray[i]) ;
                    out.write(textContent) ;
                    out.newLine() ;
                }

                out.close() ;
            }catch(IOException e)
            {
                System.out.println("Could not write to file") ;
                System.exit(0) ;
            }

         System.out.println("Time to execute: " + timer.getElapsedTime() + "ns"); 
    }

    private static void replace(Comparable[] array, int i, int j) 
    {
        Comparable swap = array[i];
        array[i] = array[j];
        array[j] = swap;
    }
}
4

1 に答える 1

0

よし、疲れた目のために…こんなものでもいいかな?

    for (int i = 1; i < size; i++)
        for (int j = i; j > 0; j--)
        {
            final int cmp = insArray[j-1].compareToIgnoreCase(insArray[j]);
            System.out.format("Comparing %s at %d to %s at %d, result %d\n",
               insArray[j-1], j-1, insArray[j], j, cmp);
            if (cmp > 0) replace(insArray, j, j-1);
        }
于 2012-04-19T10:06:43.337 に答える