Skip to content

Latest commit

 

History

History
61 lines (53 loc) · 1.37 KB

HeapSort.md

File metadata and controls

61 lines (53 loc) · 1.37 KB

##Heap Sort Back

Overview

  • 堆排序: 利用大頂堆或小頂堆的特性, 每趟取出樹根結點並調整堆, 直到所有數被取出.
    • 大頂堆:
    • 小頂堆:
  • 时间复杂度: (最好,平均,最壞情況)
  • 空間複雜度:
  • 稳定性: 不稳定
  • 适用情况: 實時應用, 快速取出最大或最小值
  • BUILD_MAX_HEAP:
  • MAX_HEAPIFY:

Example

1. BUILD_MAX_HEAP

2. MAX_HEAPIFY

3. HEAP_SORT

Code

void MAX_HEAPIFY(int A[], int heap_size, int i)
{
	int largest;
	int l = LEFT(i);
	int r = RIGHT(i);
	if (l < heap_size && A[l] > A[i])
		largest = l;
	else
		largest = i;

	if (r < heap_size && A[r] > A[largest])
		largest = r;
	if (largest != i)
	{
		exchange(A, i, largest);
		MAX_HEAPIFY(A, heap_size, largest);
	}
}

void BUILD_MAX_HEAP(int A[], int heap_size)
{
	for (int i = heap_size / 2 - 1; i >= 0; i--)
		MAX_HEAPIFY(A, heap_size, i);
}

void HEAPSORT(int A[], int* heap_size)
{
	BUILD_MAX_HEAP(A,*heap_size);
	
	for (int i = *heap_size - 1; i > 0; i--)
	{
		exchange(A, 0, i);
		*heap_size = *heap_size - 1;
		MAX_HEAPIFY(A, *heap_size, 0);
	}
}