堆排序 Heap Sort
2017-12-02 09:37
429 查看
Heap Sort
使用heap sort做升序
1) 根据输入的数据创建最大堆;
2)创建以后最大的元素会在根节点上,交换根节点与最后一个元素,将剩余的元素重新堆化;
3) 重复2) 直到所有元素堆化完成。
Code
Note
堆排序不需要额外空间;
在实际应用中,堆排序不如Quicksort 和Mergesort 那么广泛,但是二叉堆的数据结构有非常广泛的应用。
使用heap sort做升序
1) 根据输入的数据创建最大堆;
2)创建以后最大的元素会在根节点上,交换根节点与最后一个元素,将剩余的元素重新堆化;
3) 重复2) 直到所有元素堆化完成。
Code
public class HeapSort { @Test public void test(){ int[] arr = {4,10,3,5,1}; sort(arr); } public void sort(int arr[]) { int n = arr.length; // Build heap (rearrange array) for (int i = n / 2 - 1; i >= 0; i--) { heapify(arr, n, i); } // One by one extract an element from heap for (int i = n - 1; i >= 0; i--) { // Move current root to end int temp = arr[0]; arr[0] = arr[i]; arr[i] = temp; // call max heapify on the reduced heap heapify(arr, i, 0); } } // To heapify a subtree rooted with node i which is // an index in arr[]. n is size of heap void heapify(int arr[], int n, int i) { int largest = i; // Initialize largest as root int l = 2 * i + 1; // left = 2*i + 1 int r = 2 * i + 2; // right = 2*i + 2 // If left child is larger than root if (l < n && arr[l] > arr[largest]){ largest = l; } // If right child is larger than largest so far if (r < n && arr[r] > arr[largest]){ largest = r; } // If largest is not root if (largest != i) { int swap = arr[i]; arr[i] = arr[largest]; arr[largest] = swap; // Recursively heapify the affected sub-tree heapify(arr, n, largest); } } }
Note
堆排序不需要额外空间;
在实际应用中,堆排序不如Quicksort 和Mergesort 那么广泛,但是二叉堆的数据结构有非常广泛的应用。
相关文章推荐
- 堆排序,heapSort
- heapsort堆排序(3种语言实现 c/java/python)
- 堆排序-Heapsort
- C:C的排序算法:堆排序(HeapSort)
- 堆排序 HeapSort
- 堆排序(HeapSort)的实现与应用
- Java实现堆排序(Heapsort)实例代码
- HeapSort 堆排序
- 堆排序(heap sort)总结
- 堆排序(Heap Sort)原理及Java实现
- 第六章 堆排序(heapsort)
- HeapSort(堆排序)
- 堆排序(1)HeapSort
- [Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)
- 堆排序-Heap Sort
- HeapSort 堆排序 基于伪代码实现
- 堆排序 (Heap sort)
- 堆排序 heapsort(大根堆) c++
- 堆排序 heapsort
- 基本排序方法及分析(七):HeapSort 堆排序