Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int parent(int i){
- return i / 2;
- }
- int left(int i){
- return i * 2;
- }
- int right(int i){
- return i * 2 + 1;
- }
- void heapify(int arr[], int i){
- int l = left(i);
- int r = right(i);
- int max = i;
- if (l <= arr[0] && arr[l] > arr[max]) max = l;
- if (r <= arr[0] && arr[r] > arr[max]) max = r;
- if (max != i){
- int temp = arr[max];
- arr[max] = arr[i];
- arr[i] = temp;
- heapify(arr, max);
- }
- }
- void buildHeap(int arr[]){
- for(int i = arr[0] / 2; i > 0; i--) {
- heapify(arr, i);
- }
- }
- void heapSort(int arr[]){
- buildHeap(arr);
- for(int i = arr[0]; i > 1; i--){
- int temp = arr[i];
- arr[i] = arr[1];
- arr[1] = temp;
- arr[0] -= 1;
- heapify(arr, 1);
- }
- }
- int main() {
- int n;
- scanf("%d", &n);
- int* arr = (int*)malloc((n + 1) * sizeof(int));
- for (int i = 1; i < n + 1; i++) {
- scanf("%d", &arr[i]);
- }
- arr[0] = n;
- heapSort(arr);
- for(int i = 1; i < n + 1; i++){
- printf("%d ", arr[i]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement