微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决算法问题冒泡插入和选择排序打印出来

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

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

我目前只使用 readNumbers() 方法(我已经注释掉了其他方法)。我一直遇到一个问题,它进行比较和交换。但是,在排序后打印出来的数字如下所示。

File 1 contains: 10,1,2,3,4,5,6,7,8,9,10
file 2 contains: 10,10,1
file 3 contains: 10,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,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,};
 
  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() 方法不返回 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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。