堆排序实现
2012-03-03 11:48
218 查看
// 算法.cpp : 定义控制台应用程序的入口点。 //对于堆排序来说,逻辑上是树的形式,实际存储的形式还是数组。只是对下标进行一定的计算获得逻辑上树的形式。 //此堆的结构为0号位为根结点,没有左子树,右边接着以1号位置为根结点的子树。 #include "stdafx.h" #include <iostream> using namespace std; const int HEAP_SIZE = 13; //堆大小 int parent(int); int left(int); int right(int); void Max_Heapify(int [], int, int); void Build_Max_Heap(int []); void print(int []); void HeapSort(int [], int); int _tmain(int argc, _TCHAR* argv[]) { int A[HEAP_SIZE] = {19, 1, 10, 14, 16, 4, 7, 9, 3, 2, 8, 5, 11}; HeapSort(A, HEAP_SIZE); system("pause"); return 0; } //获得左子结点 int left(int i) { return 2 * i; } //获得右子结点 int right(int i) { return (2 * i + 1); } //最大根结点调整 void Max_Heapify(int A[], int i, int heap_size) { int l = left(i); int r = right(i); int largest; int temp; //找出三个结点中最大的一个 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) { temp = A[i]; A[i] = A[largest]; A[largest] = temp; //递归实现子树最大根结点 Max_Heapify(A, largest, heap_size); } } //建立最大堆 void Build_Max_Heap(int A[]) { for(int i = (HEAP_SIZE-1)/2; i >= 0; i--) { //子树最大堆调整 Max_Heapify(A, i, HEAP_SIZE); } } //打印树 void print(int A[]) { for(int i = 0; i < HEAP_SIZE;i++) { printf("%d ", A[i]); } printf("\n"); } //堆排序 void HeapSort(int A[], int heap_size) { Build_Max_Heap(A); int temp; for(int i = heap_size - 1; i > 0; i--) { //将最大的放在堆尾 temp = A[0]; A[0] = A[i]; A[i] = temp; //最大根结点调整 Max_Heapify(A, 0, i); } print(A); }
Flash http://ds.fzu.edu.cn/fine/resources/FlashContent.asp?id=88
相关文章推荐
- 堆排序原理详解和Java实现代码
- 用堆排序实现线性时间查找前K大数字
- 利用数组实现的堆排序
- C++实现直接插入排序,折半插入排序,希尔排序,冒泡排序,简单选择排序,快速排序,堆排序
- 算法 排序 python 实现--堆排序
- 排序法系列之六---堆排序(C++代码实现)
- 堆排序原理及实现
- 堆排序(java实现)
- 选择排序的实现——堆排序
- c++模板类实现算法堆排序
- 堆排序的算法实现(C/C++)
- 利用优先队列实现堆排序(自顶向下自底向上堆化全然二叉树的运用)
- Java实现排序算法2:堆排序
- 常见排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)
- 常见的五类排序算法图解和实现(选择类:简单选择排序,锦标赛排序,树形选择排序,堆排序)
- 算法导论堆排序实现
- 优先队列(二叉堆实现) + 堆排序
- Python实现堆排序
- java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序
- C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)