Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- int main() {
- int n;
- scanf("%d", &n);
- int arr[n];
- for (int i = 0; i < n; i++) {
- scanf("%d", &arr[i]);
- int currentIndex = i;
- while (currentIndex != 0) {
- if (arr[currentIndex] < arr[(currentIndex - 1) / 2]) {
- int temp = arr[currentIndex];
- arr[currentIndex] = arr[(currentIndex - 1) / 2];
- arr[(currentIndex - 1) / 2] = temp;
- currentIndex = (currentIndex - 1) / 2;
- } else break;
- }
- }
- int currentHeapSize = n;
- while (currentHeapSize > 0) {
- int temp = arr[0];
- arr[0] = arr[currentHeapSize - 1];
- arr[currentHeapSize - 1] = temp;
- printf("%d ", arr[currentHeapSize - 1]);
- currentHeapSize--;
- int currentIndex = 0;
- while (1) {
- if (arr[2 * currentIndex + 1] < arr[2 * currentIndex + 2]) {
- if (arr[currentIndex] > arr[2 * currentIndex + 1] && (2 * currentIndex + 1 < currentHeapSize)) {
- temp = arr[currentIndex];
- arr[currentIndex] = arr[2 * currentIndex + 1];
- arr[2 * currentIndex + 1] = temp;
- currentIndex = 2 * currentIndex + 1;
- } else if (arr[currentIndex] > arr[2 * currentIndex + 2] && (2 * currentIndex + 2 < currentHeapSize)) {
- temp = arr[currentIndex];
- arr[currentIndex] = arr[2 * currentIndex + 2];
- arr[2 * currentIndex + 2] = temp;
- currentIndex = 2 * currentIndex + 2;
- } else break;
- } else {
- if (arr[currentIndex] > arr[2 * currentIndex + 2] && (2 * currentIndex + 2 < currentHeapSize)) {
- temp = arr[currentIndex];
- arr[currentIndex] = arr[2 * currentIndex + 2];
- arr[2 * currentIndex + 2] = temp;
- currentIndex = 2 * currentIndex + 2;
- } else if (arr[currentIndex] > arr[2 * currentIndex + 1] && (2 * currentIndex + 1 < currentHeapSize)) {
- temp = arr[currentIndex];
- arr[currentIndex] = arr[2 * currentIndex + 1];
- arr[2 * currentIndex + 1] = temp;
- currentIndex = 2 * currentIndex + 1;
- } else break;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement