我想在输入矢量之前以排序方式添加数字。但结果不对,我很困惑问题出在哪里? 输出如下所示。
我想在没有任何内置方法的情况下使用某种算法进行排序。
import java.util.Vector;
public class Test {
public static void main(String ar[]){
//Numbers to enter in vector
int[] number = {5,2,98,3,10,1};
Vector<Integer> v = new Vector<Integer>();
v.add(number[0]);
for(int i=1;i<number.length;i++){
for(int j=v.size();j>0;j--){
System.out.println("Entered: "+number[i]);
if(number[i] <= v.get(j-1)){
v.add(j-1,number[i]);
break;
}else{
v.add(j,number[i]);
break;
}
}
}
for(int s:v)
System.out.print(s + " ");
}
}
输出:
输入:2
输入:98
输入:3
输入:10
输入:1
2 5 3 10 1 98
答案 0 :(得分:1)
你有一个基于变量for
的第二个(内部)j
循环,但那个&#34;循环&#34;只会执行一次。 j
循环中的条件导致循环退出(break;
)。
当您添加每个号码时,唯一的可能性是上一个或下一个。
答案 1 :(得分:0)
你的内部for循环实际上并没有循环。
无论条件number[i] <= v.get(j-1)
如何,
循环将在一步后退出。
你想做的是, 从向量的开头迭代, 当你发现一个比你要插入的元素大的元素时, 然后插入它,并打破循环。 这与你到目前为止所做的相反,它是从向量的末尾开始迭代的。 如果在没有插入任何东西的情况下到达循环的末尾, 然后追加价值。
该计划也非常需要其他一些改进:
Vector
。请改用ArrayList
。toString
Vector
实现已经很容易阅读。修复问题并提出建议:
List<Integer> list = new ArrayList<>();
for (int current : numbers) {
boolean inserted = false;
for (int j = 0; j < list.size(); j++) {
if (current <= list.get(j)) {
list.add(j, current);
inserted = true;
break;
}
}
if (!inserted) {
list.add(current);
}
}
System.out.println(list);
最后但并非最不重要的是,不是通过迭代列表来搜索插入点, 使用二进制搜索可以获得更好的性能, 特别是对于更大的价值观。
答案 2 :(得分:0)
你的内循环似乎不会循环多次。这就是为什么钥匙没有插入正确位置的原因。
更简洁的解决方案是
public class Test {
public static void main(String ar[]){
//Numbers to enter in vector
int[] number = {5,2,98,3,10,1};
Vector<Integer> v = new Vector<Integer>();
v.setSize(number.length);
v[0] = number[0];
for(int i=1, vSize = 1; i < number.length; i++, vSize++){
int j = 0, k = 0;
for(j = 0; j < vSize; j++) {
if(v[j] < number[i]) {
break;
}
for(k = vSize; k > j; k--) {
v[k] = v[k -1];
}
v[k] = number[i];
}
for(int s:v)
System.out.print(s + " ");
}
}
答案 3 :(得分:0)
另一个简单的解决方案是:
U+270A U+1F3FE
内部import java.util.Vector;
public class Test {
public static void main(String ar[]){
//Numbers to enter in vector
int[] number = {5,2,98,3,10,1};
Vector<Integer> v = new Vector<Integer>();
v.add(number[0]);
for(int i=1, j;i<number.length;i++){ //j declared here for better scope
for(j=v.size();j>0 && v.get(j-1)>number[i] ;j--); //<-- some changes here,
v.add(j,number[i]); //<-- and here
}
}
for(int s:v)
System.out.print(s + " ");
}
}
循环仅用于查找要插入的元素的正确索引。