我正在尝试在我的Android应用程序中实现此代码,加油站列表应按升序排序。 我应该实现另一种排序方法吗? import java.util.ArrayList;
public class sortTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Float> arr = new ArrayList<Float> ();
for (int i = 0 ; i <= 12 ; i++)
{
arr.add(i, (float) (((Math.random() * 90) + 10)/10)); // add random values to array
}
ArrayList<String> listDataHeader = new ArrayList<String>();
listDataHeader.add("Shell distance: "+ arr.get(0));
listDataHeader.add("Esso Distance:" +arr.get(1));
listDataHeader.add("Tesco Distance "+arr.get(2));
listDataHeader.add("Asda Distance "+arr.get(3));
listDataHeader.add("BP Distance "+arr.get(4));
listDataHeader.add("Texaco Distance "+arr.get(5));
String temp;
int f = listDataHeader.size();
for(int i=0;i<f;i++){
for(int j=i+1;j<f;j++){
if(arr.get(i)>arr.get(j)){
temp = listDataHeader.get(i);
String x = listDataHeader.get(j);
listDataHeader.set(i,listDataHeader.get(j));
listDataHeader.set(j,temp);
}
}
}
for(String str:listDataHeader) //this list is list<String>
{
System.out.println(str);
}
}
}
答案 0 :(得分:0)
嗯,这是冒泡排序,而不是插入排序。另外,你知道已经有Collections.sort()
方法吗?
无论如何,它不起作用的原因是因为你有两个不同的列表你正在排序一个并在另一个上进行比较(你正在交换listDataHeader
的元素,但你的测试继续列出arr
)。
我的建议:只保留一个交换和比较列表:使用arr
。对其进行排序后,将其格式化,添加加油站的名称并将其传递到另一个列表:listDataHeader
。
但是如果你想保持原样,你可以在交换arr
的同时交换listDataHeader
,这样就可以了。
需要更多工作的另一种解决方案:
您可以创建自己的Petrol
类来实现Comparable接口。这个类可以包含两个元素:String
带有汽油的名称,float
是您要对其进行排序的随机值。
现在您可以创建List
并将所有Petrol
放入其中,然后拨打Collections.sort()
在该列表上它将起作用。
有很多关于如何实现Comparable
的例子,甚至是“Java教程”中的一些例子。
很好的部分:如果你这样做,你将掌握有关如何扩展Java内容的知识。
答案 1 :(得分:0)
您的代码会进行一些不必要的调用(字符串x被分配但根本不使用),也不是插入排序。在这种情况下插入排序将是:
int f = listDataHeader.size();
for(int i=0; i<f; i++){ //first prediction: the smallest element in iteration is at "i".
int prediction = i;
for(int j=i+1; j<f; j++){
if(arr.get(i) > arr.get(j)){ //found even smaller element - change prediction.
prediction = j
}
}
String temp = listDataHeader.get(i);
listDataHeader.set(i, listDataHeader.get(prediction);
listDataHeader.set(j, temp);
arr.set(j, arr.get(i)); //for this to work you need to sort the array of
arr.set(i, arr.get(prediction)); //values as well.
}
您当前的算法正在进行冒泡排序而不是通常的方式(使用do-while循环)。你也可以通过检查是否预测来改进我写的代码!= i。如果没有,交换是没有必要的。阅读有关简单排序算法的更多信息。