package com.Tecent.success.sg;
import java.util.Scanner;
/**
* 归并排序链表版
*
* @author Dell
*
*/
class ListNode
{
public int val;
public ListNode next;
public ListNode(int val)
{
this.val=val;
}
}
public class GuiBing2 {
public static ListNode MergeSort(ListNode head)
{
if(head==null||head.next==null) //很关键,只剩下一个元剩时要单独处理
return head;
ListNode mid= findmid(head);
ListNode post=mid.next;
mid.next=null;
return merge(MergeSort(head),MergeSort(post));
}
public static ListNode findmid(ListNode head)
{
if(head==null||head.next==null)
return head;
ListNode slow=head;
ListNode fast=head;
while(fast.next!=null&&fast.next.next!=null)
{
slow=slow.next;
fast=fast.next.next;
}
return slow;
}
public static ListNode merge(ListNode list1, ListNode list2)
{
if(list1==null&&list2!=null)
return list2;
if(list1!=null&&list2==null)
return list1;
if(list1==null&&list2==null)
return null;
ListNode p=list1;
ListNode q=list2;
ListNode result=new ListNode(-1);
ListNode r=result;
while(p!=null&&q!=null)
{
if(p.val<q.val){
r.next=p;
p=p.next;
}
else
{
r.next=q;
q=q.next;
}
r=r.next;
}
if(p!=null)
r.next=p;
if(q!=null)
r.next=q;
return result.next;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
ListNode head=new ListNode(-1);
ListNode p=head;
for(int i=0;i<n;i++)
{
ListNode temp=new ListNode(sc.nextInt());
p.next=temp;
p=p.next;
}
ListNode result=MergeSort(head.next);
while(result!=null)
{
System.out.print(result.val+" ");
result=result.next;
}
}
}