代码:
#include "iostream" #define null 0 using 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<<p->data<<" "; p=p->next; } cout<<endl; } void display1(Link *h){ Link*p=h->next; while(p!=null){ cout<<p->data<<" "; p=p->next; } cout<<endl; } void main(){ Link* A[4]; int i; for(i=1;i<4;i++) A[i]=createLink(); for(i=1;i<4;i++) display(A[i]); Link* T=mergeSort(A); display1(T); getchar(); getchar(); }