#include typedef struct dasim { int key; int link; } element; /*-------------------------------------------------------------- main ---*/ main() { int i,n; static char buf[80]; element list[11]; int array[11]={0,61,5,77,1,26,11,59,15,48,19}; n=10; while(buf[0] != 'q') { for(i=0;i<=n;i++) list[i].key = array[i]; gets(buf); switch (buf[0]) { case 's': selection(list,n); break; case 'h': heapsort(list,n); break; case 'b': binary(list,n); break; } } printout(list); } struct dasima { int item; struct dasima *lptr; struct dasima *rptr; } *head, *curr, *prev; binary(element list[], int n) { int i,j; prev = head = (struct dasima *)malloc(sizeof(struct dasima)); head -> item = list[1].key; head -> lptr = head -> rptr = NULL; for(i=2; i<=10;i++) { prev = head; /* printtree(head); */ curr = (struct dasima *)malloc(sizeof(struct dasima)); curr -> item = list[i].key; curr -> lptr = curr -> rptr = NULL; while (prev) { if(curr -> item > prev -> item) { if(prev -> rptr) prev = prev -> rptr; else { prev -> rptr = curr; break; } } else { if(prev -> lptr ) prev = prev -> lptr; else { prev -> lptr = curr; break; } } } } printtree(head); } printtree(struct dasima *head) { if(head -> lptr) printtree(head -> lptr); printf("%d\t",head -> item); if(head -> rptr) printtree(head -> rptr); } /*----------------------------------------------------------- heapsort ---*/ selection(element list[], int n) { int i,j,k; element temp; i=n; while(i>0) { j=i; for(k=0;klist[j].key) j=k; } temp.key=list[i].key; list[i].key=list[j].key; list[j].key=temp.key; i--; } printout(list); } heapsort(element list[], int n) { int i; element temp; for(i=n/2; i>0; i--) adjust(list,i,n); for(i=n-1; i>0; i--) { /* SWAP FIRST ELEMENT WITH ELEMENT I+1 */ temp.key=list[1].key; list[1].key=list[i+1].key; list[i+1].key=temp.key; adjust(list,1,i); } printout(list); } /*------------------------------------------------------- printout -------*/ printout(element list[]) { int i; for(i=0;i<=10;i++) printf("%d\n",list[i].key); } /*-------------------------------------------------------------- adjust --*/ adjust(element list[], int root, int n) { int child, rootkey; rootkey=list[root].key; child=2*root; while(child<=n) { if((childlist[child].key) break; else { list[child/2].key=list[child].key; child*=2; } } list[child/2].key=rootkey; }