【发布时间】:2017-04-22 15:01:01
【问题描述】:
(免责声明:学校)
据我所知,递归拆分链表,然后将其发送到另一个函数进行合并是 O(nlogn) 时间和 O(n) 空间。是否可以在 O(nlogn) 时间和 O(1) 空间复杂度的链表上进行归并排序?你会怎么做呢?
任何帮助表示赞赏
PS:要确保传统的归并排序是空间复杂度0(n),这是0(n)的一个例子吧?对于 O(1) 空间,它将如何改变?
void sortTrack() {
Node merge = this.head;
this.head = Node (merge);
}
public Node mergeSort(Node head){
if ((head == null)||(head.next == null)){
return head;
}
Node left = head;
Node right = head.next;
while((right != null) && right.next != null){
head = head.next;
right = right.next.next;
}
right = head.next;
head.next = null;
return merge(mergeSort(left), mergeSort(right));
}
public Node merge(Node left, Node right){
Node head = new Node ();
Node temp = head;
while((left != null) && (right !=null)){
if(left <= right ){
temp.next = left;
temp = left;
left = left.next;
}
else{
temp.next = right;
temp = right;
right = right.next;
}
}
if(right == null)
temp.next = left;
else
temp.next = right;
return head.next;
}
【问题讨论】:
标签: java linked-list mergesort