반응형
//배열의 개수를 2등분 한다. 한쪽은 배열 개수가 전체에서 2로 나눈 수, 다른 한 쪽은 전체에서 그 수를 뺀 수.
// 각각의 첫번째를 포인터로 지정한다.
// 각 [] [] 배열 끼리 최소 값을 찾는다.
// 최소값을 찾은 것 서로 비교
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <stdio.h> #include <iostream> using namespace std; void swap(int* a, int* b) { int t = *a; *a = *b; *b = t; } void maxHeapify(int array[], int size, int index) { int largest = index; // Initialize the largest as root int left = (index << 1) + 1; // left = 2*index + 1 int right = (index + 1) << 1; // right = 2*index + 2 // See if left child of root exists and is greater than root if (left < size && array[left] > array[largest]) largest = left; // See if right child of root exists and is greater than the largest so far if (right < size && array[right] > array[largest]) largest = right; // Change root, if needed if (largest != index) { swap(&array[largest], &array[index]); maxHeapify(array, size, largest); } } void heapSort(int array[], int size) { int i; // Create an initial max heap. // Start from bottommost and rightmost internal mode and // heapify all internal modes in bottom up way for (i = (size - 2) / 2; i >= 0; i--) maxHeapify(array, size, i); // Repeat reduce and heapify steps while heap size is greater than 1. while (size > 1) { // The largest item in Heap is stored at the end. swap(&array[0], &array[size - 1]); // Reduce heap size size--; // Heapify the root of tree maxHeapify(array, size, 0); } } void printArray(int arr[], int size) { int i; for (i = 0; i < size; i++) printf("%d ", arr[i]); printf("\n"); } int main(int argc, char** argv) { int num; cin >> num; int *data = new int[num]; for (int i = 0; i < num; i++) { cin >> data[i]; } heapSort(data, num); printArray(data, num); delete[] data; return 0; } | cs |
'Algorithm' 카테고리의 다른 글
백준(baekjoon)(BaekJoon)코딩 1978번:소수찾기 답 (0) | 2016.09.23 |
---|---|
백준(baekjoon)(BaekJoon)코딩 2581번:소수 답 (0) | 2016.09.23 |
(C++) - 백준(BOJ) 8958번 : OX퀴즈 답 (0) | 2016.09.23 |
백준(baekjoon)(BaekJoon)코딩 1929번:에라토스테네스의 체 답 (0) | 2016.09.23 |
(C++) - 백준(BOJ) 2747번 : 피보나치 수열 답 (0) | 2016.09.23 |