我如何让这个程序组织其中的数据,Array
以便大于 0 的数字在方法中首先是零Ordenar()
?例如:
入口
(2,3,0,1,0)
离开
(2,3,1,0,0)
在这里我发布我的代码
Scanner leer=new Scanner(System.in);
for(i=0;i<a.length;i++){
System.out.print("ingrese posicion["+i+"]=");
a[i]=leer.nextInt();
}
Ordenar();
}//main
static public void Ordenar(){
//Código que necesito
}
我的理解是您不想要传统的“排序”,您只希望
0
最后找到数字,而其他数字保留它们在数组中的顺序。这样做的一种方法是分两个阶段:
这种方法只需要
array.length x 2
在最坏的情况下进行最多的迭代,所以它不是很昂贵。代码:
结果:
早上好 Camilo,为了组织一个数组,已经定义了不同的排序方法,这里有一篇关于它及其在 Java 中的实现的文章。然后,根据我在您的示例中看到的,您只需要更改位置零。所以我建议修改冒泡方法,就像这样
入口
离开
在这里,我留下已经测试过的代码,链接。
您可以初始化要保存数据的数组,因为这样可以确保所有值默认为 0。
然后,您只需保存最后一个大于零的数字出现的位置,并将输入的大于零的新值保存在该位置。完成此操作后,将其加一,以便将下一个大于零的值插入到新的
ultimaPosicion
.完整的程序将是:
这样,您可以跳过 Sort 方法,直接对数据输入进行排序。
进入:
你会得到输出:
您应该使用
public static <T> void sort(T[] a, Comparator<? super T> c)
并创建一个匹配器来满足您的需求。一个实现是这样的:输出是:
根据您摆出的情况,您阅读后需要订购的安排。也就是说,你之前没有保存它,你只知道它的长度。在这种情况下,您可以方便地阅读它并保持函数的 O(n) 线性复杂度。