代码:
#include "iostream"#define null 0using namespace std;typedef struct node{ int data; struct node *next;}Link;int heap_size=3;Link* createLink(){ int data; Link *t,*h=null,*p; cin>>data; int i=0; while(data!=0){ p=(Link*)malloc(sizeof(Link)); p->data=data; p->next=null; i++; if(i==1) h=t=p; else { t->next=p; t=t->next; } cin>>data; } return h;}int left(int i){ return 2*i;}int right(int i){ return 2*i+1;}void min_Heapify(Link* A[],int i){ int l,r; l=left(i); r=right(i); int smallest; if(l<=heap_size&&A[i]->data>A[l]->data) smallest=l; else smallest=i; if(r<=heap_size&&A[smallest]->data>A[r]->data) smallest=r; if(smallest!=i){ Link *temp; temp=A[i]; A[i]=A[smallest]; A[smallest]=temp; min_Heapify(A,smallest); }}Link *extract_MinHeap(Link*A[]){ Link* min; min=A[1]; A[1]=A[1]->next; if(A[1]==null){ A[1]=A[heap_size]; heap_size--; } min_Heapify(A,1); return min;}void build_Minheap(Link*A[]){ heap_size=3; for(int i=heap_size/2;i>=1;i--) min_Heapify(A,i);}Link* mergeSort(Link*A[]){ Link *T,*n; T=(Link*)malloc(sizeof(Link)); T->next=null; n=T; Link *p; build_Minheap(A); while(heap_size!=1){ p=extract_MinHeap(A); p->next=null; n->next=p; n=n->next; } n->next=A[1]; return T;}void display(Link *h){ Link*p=h; while(p!=null){ cout<data<<" "; p=p->next; } cout< next; while(p!=null){ cout< data<<" "; p=p->next; } cout<