prvy
This commit is contained in:
		
							parent
							
								
									4a73ded563
								
							
						
					
					
						commit
						b884843e8e
					
				
							
								
								
									
										120
									
								
								a4/program.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								a4/program.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,120 @@
 | 
			
		||||
#include<stdio.h>
 | 
			
		||||
#include<stdlib.h>
 | 
			
		||||
#define LINESIZE 100
 | 
			
		||||
struct heap {
 | 
			
		||||
    int* array;
 | 
			
		||||
    int size;
 | 
			
		||||
    int capacity;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int parent(int i){
 | 
			
		||||
    return (i -1) / 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int lavy_syn(int i){
 | 
			
		||||
    return (2*i) + 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int pravy_syn(int i){
 | 
			
		||||
    return (2*i) + 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct heap* create_heap(int capacity){
 | 
			
		||||
    struct heap* h = calloc(1,sizeof(struct heap));
 | 
			
		||||
    h->array = calloc(capacity,sizeof(int));
 | 
			
		||||
    h->capacity =capacity;
 | 
			
		||||
    h->size = 0;
 | 
			
		||||
    return h;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void check_heap_property(struct heap* h){
 | 
			
		||||
    for(int i =0;i<h->size;i++){
 | 
			
		||||
 | 
			
		||||
        int lavy = lavy_syn(i);
 | 
			
		||||
        int pravy = pravy_syn(i);
 | 
			
		||||
 | 
			
		||||
        if(pravy >= h->size || lavy>=h->size){
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if(h->array[i] > h->array[pravy] || h->array[i] > h->array[lavy]){
 | 
			
		||||
            printf("%s\n","Niejekopa.");
 | 
			
		||||
            exit(0);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void delete_heap(struct heap* h){
 | 
			
		||||
    free(h->array);
 | 
			
		||||
    free(h);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void swap(int arr[],int a, int b){
 | 
			
		||||
    int temp = arr[a];
 | 
			
		||||
    arr[a] = arr[b];
 | 
			
		||||
    arr[b] = temp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void add(struct heap* h,int value){
 | 
			
		||||
 | 
			
		||||
    int i = h->size;
 | 
			
		||||
    if(h->size>=h->capacity){
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    h->size += 1;
 | 
			
		||||
    h->array[i] = value;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void print(struct heap* h,int count_spaces,int index){
 | 
			
		||||
 | 
			
		||||
    if(index>=h->size){
 | 
			
		||||
        return ;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    for(int i =0;i<count_spaces;i++){
 | 
			
		||||
        printf(" ");
 | 
			
		||||
    }
 | 
			
		||||
    printf("%d\n",h->array[index]);
 | 
			
		||||
    print(h,count_spaces+1,lavy_syn(index));
 | 
			
		||||
    print(h,count_spaces+1,pravy_syn(index));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sort(struct heap *h){
 | 
			
		||||
    int i = h->size-1;
 | 
			
		||||
    int p = parent(i);
 | 
			
		||||
 | 
			
		||||
    while(h->array[i] < h->array[p]) {
 | 
			
		||||
        swap(h->array,i, p);
 | 
			
		||||
        i = parent(i);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(){
 | 
			
		||||
    int i  =0;
 | 
			
		||||
    int temp_array[LINESIZE] = {0};
 | 
			
		||||
 | 
			
		||||
    while(scanf("%d",&temp_array[i]) == 1) {
 | 
			
		||||
        i++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    struct heap* h = create_heap(i);
 | 
			
		||||
 | 
			
		||||
    for(int j =0;j<i;j++){
 | 
			
		||||
        add(h,temp_array[j]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    check_heap_property(h);
 | 
			
		||||
    sort(h);
 | 
			
		||||
    puts("Jetotakakopa:");
 | 
			
		||||
 | 
			
		||||
    print(h,0,0);
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user