[ create a new paste ] login | about

Link: http://codepad.org/zcfNOtye    [ raw code | output | fork ]

C, pasted on Feb 28:
#include <stdio.h>

void Heapify(int num[], int start, int end)
{
	int root = start;
	while(root*2+1<=end)
	{ // at least one child exists
		int swap = root;
		int lchild = root*2+1;
		int rchild = root*2+2;
		if(num[swap]<num[lchild]){
			swap = lchild;
		}
		if(rchild<=end && num[swap]<num[rchild]){
			swap = rchild;
		}
		if(swap!=root){
				// swap here
			int temp = num[root];
			num[root] = num[swap];
			num[swap] = temp;
			root = swap;
		}
		else
			return;
	}
}

void buildHeap(int num[]) {
	int length=sizeof(num)/sizeof(num[0]);
	int start = (length/2)-1; // Starting from last parent
	int end = length-1;
	while(start>=0){
		Heapify(num,start, end);
		if(start==0)
			break;
		start= start-1;            
	}
}
    
void heapsort(int num[]) {
        int length=sizeof(num)/sizeof(num[0]);
        printf("%d ", length);
	buildHeap(num);
	int i;  
	//for (i = 0; i < length; i++)
		//printf("%d ",num[i]);
	int end = length-1;
	while(end>0){
			// swap first elem with last
		int temp = num[0];
		num[0] = num[end];
		num[end] = temp;
		Heapify(num,0,end-1);
		end--;
	}   
}

int main() {
	int num[]={1,7,-32,4,101,-99,16,3};
	heapsort(num);

	return 0;
}


Output:
1
1 


Create a new paste based on this one


Comments: