2012-04-19 69 views
0

我想知道是否可以打印出每一步。这里是我的代码: ,你可以看到,我传入一个链表,我复制到一个数组的值可能使我的排序生活更容易,然后将排序后的数组写入单独的文本文件。打印类似的步骤

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; 
    } 
} 
+2

我正在尝试制定一个假设,以解释您编写此代码的事实以及代码已经清楚地显示如何记录算法的每个步骤的事实。你能帮助我吗? – 2012-04-19 09:50:19

+0

在for(int i = 1; i 2012-04-19 09:53:50

+0

对于我来说这个问题并不完全清楚。你的意思是在每个分拣步骤之后打印insArray的状态?在调用replace之前,添加代码以将insArray的内容写入文件或stdout中? – Matthias 2012-04-19 09:54:05

回答

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); 
     }