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