Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.40 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.     int n;
  5.     scanf("%d", &n);
  6.     int arr[n];
  7.     for (int i = 0; i < n; i++) {
  8.         scanf("%d", &arr[i]);
  9.         int currentIndex = i;
  10.         while (currentIndex != 0) {
  11.             if (arr[currentIndex] < arr[(currentIndex - 1) / 2]) {
  12.                 int temp = arr[currentIndex];
  13.                 arr[currentIndex] = arr[(currentIndex - 1) / 2];
  14.                 arr[(currentIndex - 1) / 2] = temp;
  15.                 currentIndex = (currentIndex - 1) / 2;
  16.             } else break;
  17.         }
  18.     }
  19.     int currentHeapSize = n;
  20.     while (currentHeapSize > 0) {
  21.         int temp = arr[0];
  22.         arr[0] = arr[currentHeapSize - 1];
  23.         arr[currentHeapSize - 1] = temp;
  24.         printf("%d ", arr[currentHeapSize - 1]);
  25.         currentHeapSize--;
  26.         int currentIndex = 0;
  27.         while (1) {
  28.             if (arr[2 * currentIndex + 1] < arr[2 * currentIndex + 2]) {
  29.                 if (arr[currentIndex] > arr[2 * currentIndex + 1] && (2 * currentIndex + 1 < currentHeapSize)) {
  30.                     temp = arr[currentIndex];
  31.                     arr[currentIndex] = arr[2 * currentIndex + 1];
  32.                     arr[2 * currentIndex + 1] = temp;
  33.                     currentIndex = 2 * currentIndex + 1;
  34.                 } else if (arr[currentIndex] > arr[2 * currentIndex + 2] && (2 * currentIndex + 2 < currentHeapSize)) {
  35.                     temp = arr[currentIndex];
  36.                     arr[currentIndex] = arr[2 * currentIndex + 2];
  37.                     arr[2 * currentIndex + 2] = temp;
  38.                     currentIndex = 2 * currentIndex + 2;
  39.                 } else break;
  40.             } else {
  41.                 if (arr[currentIndex] > arr[2 * currentIndex + 2] && (2 * currentIndex + 2 < currentHeapSize)) {
  42.                     temp = arr[currentIndex];
  43.                     arr[currentIndex] = arr[2 * currentIndex + 2];
  44.                     arr[2 * currentIndex + 2] = temp;
  45.                     currentIndex = 2 * currentIndex + 2;
  46.                 } else if (arr[currentIndex] > arr[2 * currentIndex + 1] && (2 * currentIndex + 1 < currentHeapSize)) {
  47.                     temp = arr[currentIndex];
  48.                     arr[currentIndex] = arr[2 * currentIndex + 1];
  49.                     arr[2 * currentIndex + 1] = temp;
  50.                     currentIndex = 2 * currentIndex + 1;
  51.                 } else break;
  52.             }
  53.         }
  54.     }
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement