如何解决算法问题冒泡插入和选择排序打印出来
我在打印时遇到了问题。当我运行程序时,我得到了这个:
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 举报,一经查实,本站将立刻删除。