#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;
}

    Source: geocities.com/hsvfapa