排序类中arraylist插入排序:
public void insertionSort(ArrayList <Double>list){
double temp;
int previousIndex;
for(int index = 1; index < list.size(); index++){
temp = list.get(index);
previousIndex = index - 1;
while((list.get(previousIndex) > temp) && (previousIndex > 0)){
list.set((previousIndex+1), list.get(previousIndex));
previousIndex-=1;
}
if(list.get(previousIndex) > temp){
list.set((previousIndex+1), list.get(previousIndex));
list.set((previousIndex+1), temp);
}else{
list.set((previousIndex+1), temp);
}
}
}
主类:
package sorts;
import java.util.*;
public class TestSorts {
public static void displayArrayList(ArrayList <Double> list){
for (int i=0; i<list.size();i++){
System.out.print(list.get(i)+" \n");
}
System.out.println("\n");
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int numItems,searchNum,location;
Sorts sort=new Sorts();
Scanner in=new Scanner(System.in);
int numItems,searchNum,location;
Sorts sort=new Sorts();
System.out.print("Enter the number of elements: ");
numItems=in.nextInt();
ArrayList <Double> list=new ArrayList<>();
for (int i=0;i<numItems;i++){
list.add((int)100*Math.random());
}
System.out.println("Unsorted: ");
displayArrayList(list);
sort.insertionSort(list);
System.out.println("Sorted: ");
displayArrayList(list);
}
}
基本上现在发生的情况是,数字将生成良好,并且排序良好,但排序时除外,排序列表中的第一项将不正确。如:
未排序:
58.754608713273925
77.15776272269233
61.752499151303795
1.9942069463339207
55.30460705281677
78.06371704304172
排序:
58.754608713273925
1.9942069463339207
55.30460705281677
61.752499151303795
77.15776272269233
78.06371704304172
所以看起来一切都排序良好,但列表中的第一个随机数从未被排序,并且最终停留在与之前完全相同的位置。
最佳答案
在排序例程中,
index = 1
应为 index = 0
。目前,您正在跳过列表中的第一项,该项目存储在索引零处。
关于java - 对双数组列表进行插入排序,第一项未排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20875546/