Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void heapSort(int *A, int n) // 힙 정렬에 필요한 함수 호출
- {
- int i, tmp;
- int static r = 0;
- buildHeap(A, n);
- for (i = n; i > 0; i--) // 과정2-1) 정렬 시키기
- {
- tmp = A[i];
- A[i] = A[0];
- A[0] = tmp;
- printf("Make Sort[%d] : ", ++r);
- see(A, n);
- heapify(A, 0, i - 1); // 과정2-2) 정렬 후 힙을 유지시키기
- }
- }
- void buildHeap(int *A, int n) // 과정1-1) 힙이 되도록 알맞게 호출
- {
- int i;
- int static k = 0;
- for (i = n / 2; i >= 0; i--){
- heapify(A, i,n);
- printf("Make Heap[%d] : ", ++k);
- see(A, n);
- }
- }
- void heapify(int *A, int k, int n) // 과정1-2) 힙 만들기
- {
- int tmp;
- int smaller;
- int Left = k * 2 + 1;
- int Right = k * 2 + 2;
- if (Right <= n)
- {
- if (A[Right] < A[Left])
- smaller = Right;
- else
- smaller = Left;
- }
- else if (Left <= n)
- smaller = Left;
- else
- return;
- if (A[k] > A[smaller])
- {
- tmp = A[k];
- A[k] = A[smaller];
- A[smaller] = tmp;
- heapify(A, smaller, n);
- }
- }
- void see(int *A, int n) // 결과 호출
- {
- int i;
- for (i = 0; i <= n; i++)
- printf("%d ", A[i]);
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment