dimanche 1 mars 2015

About Heapsort Program



Sir,


I have try for



heap sort in c



But it is not sort element properly.When I run it there is no error display but elements are not sorted & prints all elements as it is.I know the logic of heap sort& tryto implement it as my logic but still it's not working.


Here is my code for heap sort.



#include<stdio.h>

int **elementArray, noOfElements, i;

void heapCreate();

void sortHeap();


int main(){
int noOfElements=0;
int k;

printf("\n Enter the number of values\n");

scanf("%d", &noOfElements);

printf("\n Enter %d numbers\n", noOfElements);
elementArray = (int *) malloc (sizeof(int)*noOfElements);
for(k=0;k<noOfElements;k++){
elementArray[k] = (int)malloc(sizeof(int*)*1);
}

for (i = 1; i <= noOfElements; ++i)

scanf("%d", &elementArray[i]);

heapCreate();
printf("\n Heap Created\n");
sortHeap();

printf("\n sorted values :\n");

for (i = 1; i <= noOfElements; ++i)

printf("%5d", elementArray[i]);

return 0;

}



void heapCreate(){

int j, k, *temp,index;

for (k = 2; k<noOfElements; ++k){

i = k;

temp = elementArray[k];

j = i / 2;

while ((i>1) && (temp > elementArray[j])) {

elementArray[i] = elementArray[j];

i = j;

j = i / 2;

if (j < 1)j = 1;

}

elementArray[i] = temp;
}

}

/*
* Sort Heap
* In the second step, a sorted array is created by repeatedly removing the largest element from the heap
* (the root of the heap), and inserting it into the array. The heap is updated after each removal to maintain the heap.
* Once all objects have been removed from the heap, the result is a sorted array.
*/

void sortHeap(){

int *temp, *value, j, k;

for (k = noOfElements; k >= 2; --k) {

temp = elementArray[1];

//elementArray[1] = elementArray[k];

elementArray[k] = temp;

i = 1;

value = elementArray[1];

j = 2;

if ((j + 1)<k)

if (elementArray[j + 1]<elementArray[j]){
j++;
}

while ((j <= (k - 1)) && (elementArray[j] > value)) {

elementArray[i] = elementArray[j];

i = j;

j = 2 * i;

if ((j + 1)<k){

if (elementArray[j + 1]>elementArray[j]){

j++;

}
else{

if (j > noOfElements){

j = noOfElements;
}
}}
elementArray[i] = value;

}

}
}



Aucun commentaire:

Enregistrer un commentaire