Skip to content

Commit f6177a7

Browse files
committed
minor bug fixes
1 parent 4c3fa13 commit f6177a7

File tree

4 files changed

+67
-12
lines changed

4 files changed

+67
-12
lines changed

heaps/question1.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,13 @@ void makeHeap(int arr[],int size){
5353
for(int i=start;i>=0;i--){
5454
maxHeapify(arr,i,size);
5555
}
56-
57-
display(arr,size);
5856
}
5957

6058
int main(){
6159
int arr[] = {9,6,5,0,8,2,1,3};
6260
int size = sizeof(arr)/sizeof(arr[0]);
6361

6462
makeHeap(arr,size);
65-
63+
display(arr,size);
6664
return 0;
6765
}

heaps/question2.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ void maxHeapify(int arr[],int i, int size){
3131
largest = right;
3232
}
3333
}
34-
if(largest <= heapSize && largest != i){
34+
if(largest <= heapSize-1 && largest != i){
3535
temp = arr[largest];
3636
arr[largest] = arr[i];
3737
arr[i] = temp;
@@ -61,7 +61,7 @@ int increaseKey(int arr[], int index, int value, int size){
6161
arr[i] = value;
6262

6363
while(i>=1 && arr[(i-1)/2]<arr[i]){
64-
temp = arr[i/2];
64+
temp = arr[(i-1)/2];
6565
arr[(i-1)/2] = arr[i];
6666
arr[i]=temp;
6767
i = (i-1)/2;
@@ -158,12 +158,12 @@ int main(){
158158
}
159159
heap[size-1] = INT_MIN;
160160
result = increaseKey(heap,size-1,value,size);
161-
if(output == -1){
161+
if(result == -1){
162162
printf("heap is already empty\n");
163-
}else if(output == -2){
163+
}else if(result == -2){
164164
printf("value is lesser than current value at that index\n");
165165
}else{
166-
printf("updated value is ..%d\n", output);
166+
printf("updated value is ..%d\n", result);
167167
}
168168
display(heap,size);
169169
break;

heaps/question5.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ void swap(int *a, int *b){
2020

2121
void minHeapify(int *arr,int i, int size){
2222
int left = 2*i+1,right=2*i+2,smallest, heapSize = size;
23-
if(left < heapSize-1 && arr[i] < arr[left]){
23+
if(left <= heapSize-1 && arr[i] < arr[left]){
2424
smallest = i;
2525
}else{
2626
smallest = left;
2727
}
28-
if(right < heapSize-1 && arr[right] < arr[smallest]){
28+
if(right <= heapSize-1 && arr[right] < arr[smallest]){
2929
smallest = right;
3030
}
31-
if(smallest < heapSize - 1 && smallest !=i){
31+
if(smallest <= heapSize - 1 && smallest !=i){
3232
swap(&arr[smallest],&arr[i]);
3333
minHeapify(arr,smallest,size);
3434
}

heaps/question6.c

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,61 @@ Time complexity: O(k) + O((n-k)logk) //k for building the heap having k elements
3535
that many time minheapify will be called
3636
Space complexity: O(1) //min heap and max heap do not require additional data structure. Same array can
3737
be manipulated unless mentioned in the question
38-
*/
38+
*/
39+
//METHOD1 - naive so not doing
40+
//METHOD2 - sorting and simple method done in arrays
41+
//METHOD3
42+
#include <stdio.h>
43+
#include <stdlib.h>
44+
#define MAX 100
45+
46+
void maxHeapify(int *arr,int i, int size){
47+
int left = 2*i+1;
48+
int right = 2*i+2;
49+
int temp, largest;
50+
51+
if(left < size && arr[left]>arr[i]){
52+
largest = left;
53+
}else{
54+
largest = i;
55+
}
56+
if(right < size && arr[right]>arr[largest]){
57+
largest = right;
58+
}
59+
if(largest < size && largest != i){
60+
temp = arr[largest];
61+
arr[largest] = arr[i];
62+
arr[i] = temp;
63+
maxHeapify(arr, largest, size);
64+
}
65+
}
66+
67+
void display(int arr[],int size){
68+
for(int i=0; i<size;i++){
69+
printf("%d\t", arr[i]);
70+
}
71+
printf("\n");
72+
}
73+
74+
void makeMaxHeap(int *arr, int size){
75+
int index = size/2 -1;
76+
for(int i=index;i>=0;i--){
77+
maxHeapify(arr,i,size);
78+
}
79+
display(arr,size);
80+
}
81+
82+
int main(){
83+
int arr[MAX], size;
84+
printf("Enter the array size\n");
85+
scanf("%d",&size);
86+
for(int i=0; i<size;i++){
87+
printf("enter the %d th element\n", i);
88+
scanf("%d",&arr[i]);
89+
}
90+
91+
makeMaxHeap(arr,size);
92+
return 0;
93+
}
94+
95+

0 commit comments

Comments
 (0)