[英]Sorting a linked list using insertion sort
我必须设计自己的插入排序,但是我使用的是Java链表。
private static void insertionSort( LinkedList<Integer> data, int first, int last ){
System.out.println("insertion sort");
ListIterator itr = data.listIterator(first+1);
int count = first+1;
while (count<=last){//itr.hasNext() &&
ListIterator itr2 = data.listIterator(itr.nextIndex()-1);
int tmp = (Integer) itr.next();
while( itr2.hasPrevious() && tmp < (Integer)itr2.previous()){
itr2.next();
itr2.set(itr2.previous());
}
data.set(itr2.nextIndex(), tmp);
count++;
}
它最终将对链接列表的各个部分进行排序,但是现在我只是将整个列表传递给它并进行尝试。 它似乎正在插入列表中,但不会将列表中的内容移回列表中。 我觉得我真的很近。 有人有指针吗?
我相信在实现中,当您调用set时,您在使用迭代器来做一些“怪异”的事情。 将它们用于此类应用程序不是必需的,因为LinkedList类提供了诸如size , get和set之类的方法。
根据您尝试执行的操作并在此处查看插入排序算法的伪代码,我编写了以下方法:
public static void insertionSort(LinkedList<Integer> linkedList, int first, int last) {
for (int i = 2; i <= last; i++) {
for (int k = i; k > first
&& (linkedList.get(k - 1) < linkedList.get(k - 2)); k--) {
Integer temp = linkedList.get(k - 2);
linkedList.set(k - 2, linkedList.get(k - 1));
linkedList.set(k - 1, temp);
}
}
}
但是,此方法有两个限制,有两个限制:
例子:
排序整个链表:
输入: LL = [2、1、8、6、4、0、3、9、5、7]
呼叫: insertSort(LL,1,ll.size())
输出:[0,1,2,3,4,5,6,7,8,9]
对链接列表中的前四个元素进行排序:
输入: LL = [2、1、8、6、4、0、3、9、5、7]
呼叫: insertSort(LL,1,4)
输出:[1,2,6,8,4,0,3,9,5,7]
对链接列表中的最后2个元素进行排序:
输入: LL = [2、1、8、6、4、0、3、9、5、7]
呼叫: insertSort(LL,9,LL.size())
输出:[2,1,8,6,4,0,3,9,5,7]
在链接列表中对4个元素进行排序:
输入: LL = [2、1、8、6、4、0、3、9、5、7]
呼叫: insertSort(LL,3,6)
输出:[2,1,0,4,6,8,3,9,5,7]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.