算法题(冒泡插入和选择排序)打印出来

algorithm problems (bubble insertion & selection sort) Print out

我 运行 在打印方面遇到了问题。当我 运行 我得到这个程序时:

TEST PROBLEM: 10 
0
0
0
0
0
0
0
0
10

我目前只使用 readNumbers() 方法(我已将其他方法注释掉)。我一直在 运行ning 进行比较和交换的问题。但是,一旦排序就将其打印出来,如下所示。

File 1 contains: 10,1,2,3,4,5,6,7,8,9,10
file 2 contains: 10,10,9,8,7,6,5,4,3,2,1
file 3 contains: 10,3,9,10,8,2,7,5,1,4

我的代码:

import java.io.*;


   public class BubblesortA
    {
     public static void insertionSort (int [] data)
   {
  int comp=0;
  int swaps=0;

  int in, out, temp;

  for (out=1; out < data.length; out++)
  {
     temp = data[out];
     comp++;

     for (in=out; in > 0 && data[in-1] >= temp; in--)
     {
        data[in] = data[in-1];
        swaps++;
     }
     data[in] = temp;
  }

  System.out.println("Insertions sort comps: "+comp);
  System.out.println("Insertion sort swap: "+swaps);
  System.out.println();

}


   public static void selectSort (int [] data )
   {
  int in, out, min;
  int counter;
  int comparisons=0;
  int swaps=0;

  for (out=0; out < data.length-1; out++)
  {
     min = out;
     comparisons++;

     for (in = out+1; in < data.length; in++)
     {
        if (data[in] < data[min])
        {
           min = in; // new minimum

           swaps++;
        }
     }

     int tmp = data[out];     // swap items
     data[out] = data[min];   //
     data[min] = tmp;          //
    }

    System.out.println("Select sort Comp: "+comparisons);
    System.out.println("Select sort Swaps: "+swaps);
    System.out.println();





  }

  public static void generateRandom(int gty)
  {
     int counter;
     int [] fillArray = new int [gty];
     int random;


   for (counter=0; counter < fillArray.length; counter++)
  {
     random = (int) (Math.random() * 100+1);
     fillArray [counter]  = random;


  }

  bubbleSort(fillArray);
  selectSort(fillArray);
  insertionSort(fillArray);
}
   public static void readNumbers (String fileName)
 {
  int counter;
  int number;
  int  [] data = new int[fileName.length()];


  try
  {
     FileReader fr = new FileReader(fileName);
     BufferedReader br = new BufferedReader(fr);
     fileName = br.readLine();

     for(counter=0; counter < fileName.length(); counter++)
     {
        number = Integer.parseInt(fileName);
        data [counter] = number;

        System.out.println(" TEST PROBLEM: "+number+ " ");

        fileName = br.readLine();
     }
     br.close();
     fr.close();



     bubbleSort(data);



  }
  catch (IOException e)
  {
     System.out.println(e);
  }


 }
  public static void bubbleSort (int [] numbers)
 {
   int outter;
   int inner;
   int temp;
   int counter;
   boolean sorted = false;

   int comparisons=0;
   int swaps =0;


   while(!sorted)
   {
   for(outter=0; outter < numbers.length; outter++)
   {
     comparisons++;
     sorted = true;

     for (inner = 0; inner < numbers.length - 1 - outter; inner++)
     {
        if (numbers[inner] > numbers[inner + 1])
        {
           temp = numbers[inner];
           numbers[inner] = numbers[inner + 1];
           numbers[inner + 1] = temp;

           swaps++;
           sorted = false;
          }

       }
    }
  /**
     int hold = numbers.length -1;

     while (hold != 0 && sorted)
     {
        comparisons++;
        sorted = false;
        for (inner = 0; inner < hold; inner++)
        {
           if (numbers[inner] > numbers[inner + 1])
           {
              temp = numbers[inner];
              numbers[inner] = numbers[inner + 1];
              numbers[inner + 1] = temp;

              swaps++;
              sorted = true;
           }

        }


     }
   */


  }

  for(counter=0; counter < numbers.length; counter++)
  {
     System.out.println(numbers[counter]);
  }

  System.out.println();
  System.out.println("BubbleSort Comparsions: "+comparisons);
  System.out.println("BubbleSort Swaps: "+swaps);
  System.out.println();

 }

public static void main(String[] args) {

  int [] = {10,9,8,7,6,5,4,3,2,1,};
 
  String file1 = "File1.txt";
  String file2 = "File2.txt";
  String file3 = "File3.txt";


  //bubbleSort(data);

   readNumbers("File1.txt");
  //readNumbers("File2.txt");
  //readNumbers("File3.txt");
  //generateRandom(100);

   }//main
 }//class 

您使用了相同的变量“fileName”作为文件名和内容长度

int[] data = new int[fileName.length()]; //This is incorrect, it should be numbers count in the file

以下方法适用于您

public static void readNumbers(String fileName) {
    int counter;
    int number;
    int[] data = new int[11]; //EDIT 1

    try {
        FileReader fr = new FileReader(fileName);
        BufferedReader br = new BufferedReader(fr);
        fileName = br.readLine();

        for (counter = 0; counter < 11; counter++) { //EDIT 2
            number = Integer.parseInt(fileName);
            data[counter] = number;

            System.out.println(" TEST PROBLEM: " + number + " ");

            fileName = br.readLine();
        }
        br.close();
        fr.close();

        bubbleSort(data);

    } catch (IOException e) {
        System.out.println(e);
    }

}

文件内容 10 9 8个 7 6个 5个 4个 3个 2个 1个 10

建议:不要硬编码 11,您应该将 for 循环替换为 while 循环并循环直到 readLine() 方法不是 returns null

您可以使用以下代码获取文件中的行数

private static int getLength(String fileName) {
    int count = 0;
    try {
        FileReader fr = new FileReader(fileName);
        BufferedReader br = new BufferedReader(fr);

        while ((br.readLine()) != null) {
            count++;
        }

        br.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return count;
}