您的位置:首页 > 其它

单链表排序----(快排+归并+插入)

2018-03-22 15:42 344 查看
public static void quicksort(Node begin,Node end){
if(begin!=end){
Node partition=getpartition(begin,end);
quicksort(begin,partition);
quicksort(partition.next,end);
}

}
public static Node getpartition(Node begin,Node end){
int val=begin.val;
Node p=begin;
Node q=p.next;
int  temp;
while(q!=end){
if(q.val<val){
p=p.next;
temp=p.val;
p.val=q.val;
q.val=temp;
}
q=q.next;
}
begin.val=p.val;
p.val=val;
return p;
}
以上为快排,不要想的太复杂



////////////////////////////////////////////////////
归并:leetcode上有public ListNode findmid(ListNode head){
ListNode fast = head;
ListNode slow = head;
while(fast!=null&&fast.next!=null&&fast.next.next!=null){
fast = fast.next.next;
slow = slow.next;
}
return slow;
}

public ListNode merge(ListNode l1,ListNode l2){
if(l1==null) return l2;
if(l2==null) return l1;
ListNode start = l1;
ListNode end = l2;
ListNode head = new ListNode(0);
ListNode res = head;
while(start!=null&&end!=null){
if(start.val<end.val){
head.next = start;
start = start.next;
head = head.next;
}else {
head.next = end;
end = end.next;
head = head.next;
}
}
if(start!=null) head.next = start;
if(end!=null) head.next = end;
return res.next;
}

public ListNode sortList(ListNode head) {
if(head==null||head.next==null) return head;
ListNode mid = findmid(head);
ListNode right = new ListNode(0);
right = sortList(mid.next);
mid.next = null; //断开,笔记上有详细注释
ListNode left = sortList(head);
return merge(left,right);
}//////////////////////////////////////////
插入排序:LeetCode有 public ListNode insertionSortList(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode root = new ListNode(Integer.MIN_VALUE);
root.next = head;
ListNode cur = head;
ListNode temp;
ListNode pre;
while(cur.next != null && cur != null){
if(cur.val <= cur.next.val)
cur = cur.next;
else{
temp = cur.next;
cur.next = temp.next;

pre = root;
while(pre.next.val <= temp.val){
pre = pre.next;
}
temp.next = pre.next;
pre.next = temp;
}
}
return root.next;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: