Java中向量中的气泡排序
我正在创建一个程序,可以用冒泡排序方法对对象(向量)进行排序。我在互联网上找到了一个代码,它帮助我创建了它(数组中的气泡排序): 当我编译程序时,我没有得到任何语法错误,但是结果是不正确的。我想我在IF语句中犯了一个错误,但我不确定这是否是唯一的错误。下面是我运行它时得到的结果:Java中向量中的气泡排序,java,sorting,bubble-sort,Java,Sorting,Bubble Sort,我正在创建一个程序,可以用冒泡排序方法对对象(向量)进行排序。我在互联网上找到了一个代码,它帮助我创建了它(数组中的气泡排序): 当我编译程序时,我没有得到任何语法错误,但是结果是不正确的。我想我在IF语句中犯了一个错误,但我不确定这是否是唯一的错误。下面是我运行它时得到的结果: Input number of integers to sort 5 Enter 5 integers 2 0 1 6 4 Sorted list of numbers 1 2 3 3 3 这是我的代码: impo
Input number of integers to sort
5
Enter 5 integers
2
0
1
6
4
Sorted list of numbers
1
2
3
3
3
这是我的代码:
import java.util.Scanner;
import java.util.*;
import java.io.*;
class BubbleSortVector {
public static void main(String []args) {
int n, c, d, swap;
Scanner in = new Scanner(System.in);
System.out.println("Input number of integers to sort");
n = in.nextInt();
Vector v ;
v = new Vector();
System.out.println("Enter " + n + " integers");
for (c = 0; c < n; c++)
//v.addElement(c);
v.insertElementAt(in.nextInt(),c);
for (c = 0; c < ( n - 1 ); c++) {
for (d = 0; d < n - c - 1; d++) {
if ((Integer)v.elementAt(d) > (Integer)v.elementAt(d+1)) /* For descending order use < */
{
swap = (Integer)v.elementAt(d);
v.insertElementAt(d+1,d);
v.insertElementAt(swap,d+1);
}
}
}
System.out.println("Sorted list of numbers");
for (c = 0; c < n; c++)
System.out.println(v.elementAt(c));
}
}
import java.util.Scanner;
导入java.util.*;
导入java.io.*;
类BubbleSortVector{
公共静态void main(字符串[]args){
整数n,c,d,swap;
扫描仪输入=新扫描仪(系统输入);
System.out.println(“输入要排序的整数数”);
n=in.nextInt();
向量v;
v=新向量();
System.out.println(“输入”+n+“整数”);
对于(c=0;c(整数)v.elementAt(d+1))/*用于降序使用*/
{
swap=(整数)v.elementAt(d);
v、 插入物(d+1,d);
v、 插入元件(交换,d+1);
}
}
}
System.out.println(“编号排序列表”);
对于(c=0;c
以下代码错误,在索引d
处插入d+1
意味着在向量中使用循环索引/计数器的值,而不是d+1处的实际值
swap = (Integer)v.elementAt(d);
v.insertElementAt(d+1,d); // this is incorrect, d is the index/loop counter
v.insertElementAt(swap,d+1);
将中间线改为:
v.insertElement((Integer)v.elementAt(d+1), d);
/。。。
向量v=新向量();
// ...
对于(c=0;c<(n-1);c++){
对于(d=0;dv.get(d+1)){
交换=v.get(d);
v、 集合(d,v.get(d+1));
v、 集合(d+1,交换);
}
}
}
// ...
您可以通过简单的交换方法解决此问题。循环后打印数组
int[] Array = new int[5]{2 , 0 , 6 , 1 , 4};
int temp = 0;
for (int i = 0; i < Array.Length; i++)
{
for (int j = 0; j < Array.Length - 1; j++)
{
if (Array[j] > Array[j + 1])
{
temp = Array[j + 1];
Array[j + 1] = Array[j];
Array[j] = temp;
}
}
}
int[]数组=新的int[5]{2,0,6,1,4};
内部温度=0;
for(int i=0;i数组[j+1])
{
温度=阵列[j+1];
数组[j+1]=数组[j];
数组[j]=温度;
}
}
}
使用向量有什么特殊原因吗?在这种情况下这并不重要,只是好奇而已。在99.9996(我相信这是确切的数字)中,您不需要向量
在大多数情况下,您需要的是列表
实现,在这种情况下,我建议使用数组列表
。同样,与错误无关。@Emz这是为了我的口试,我必须用数组和向量做一个。并做一个小演示:)你有权访问一个合适的IDE,让你为调试设置断点吗?@Coderchu我已经尝试过了,但我真的没有看到我的错误:/i我想我刚刚选出来了,看看我的答案。变量名有点混淆;)我更改了它,但当我输入与上面相同的数字时,我得到的是0 0 2 0,而不是0 1 2 4 6感谢它起作用了!我只需要将对象转换成整数:if((Integer)v.get(d)>(Integer)v.get(d+1)){和swap=(Integer)v.get(d);@petie12那么您仍然在使用原始类型。请不要这样做。@petie12,请不要将它们转换为整数,而是按照Elliott的答案,告诉向量v
存储哪些对象。@ElliottFrisch为什么要删除您自己的答案?这不是冒泡排序。
int[] Array = new int[5]{2 , 0 , 6 , 1 , 4};
int temp = 0;
for (int i = 0; i < Array.Length; i++)
{
for (int j = 0; j < Array.Length - 1; j++)
{
if (Array[j] > Array[j + 1])
{
temp = Array[j + 1];
Array[j + 1] = Array[j];
Array[j] = temp;
}
}
}