[数据结构]堆排序的C语言简单实现
来源:互联网 发布:淘宝产品标题怎么写 编辑:程序博客网 时间:2024/06/05 16:52
今天突然要用到堆排序,所以按照算法导论的伪代码简单实现了一下。
代码写得很简洁,例子也是用算法导论的例子,分别实现了小根堆,大根堆的代码,可以从小到大排序,也可以从大到小排序
#include <stdio.h>void MIN_HEAPIFY(int A[], int i, int n);void MAX_HEAPIFY(int A[], int i, int n);void BUILD_MIN_HEAR(int A[], int n);void BUILD_MAX_HEAR(int A[], int n);void swap(int *a, int *b);int main(){ int N = 10, i; int A[] = {-1, 16, 14, 10, 8, 7, 9, 3, 2, 4, 1}; for (i = 1; i <= N; ++i){ printf("%d ", A[i]); } printf("\n"); /* //从小到大排序 BUILD_MIN_HEAR(A, N); for (i = 1; i <= N; ++i){ printf("%d ", A[i]); } printf("\n"); while (N >= 1){ printf("%d ", A[1]); A[1] = A[N]; N--; BUILD_MIN_HEAR(A, N); } */ //从大到小排序 BUILD_MAX_HEAR(A, N); for (i = 1; i <= N; ++i){ printf("%d ", A[i]); } printf("\n"); while (N >= 1){ printf("%d ", A[1]); A[1] = A[N]; N--; BUILD_MAX_HEAR(A, N); } return 0;}void BUILD_MIN_HEAR(int A[], int n){ int i; for (i = n / 2; i >= 1; --i){ MIN_HEAPIFY(A, i, n); }}void BUILD_MAX_HEAR(int A[], int n){ int i; for (i = n / 2; i >= 1; --i){ MAX_HEAPIFY(A, i, n); }}void MIN_HEAPIFY(int A[], int i, int n){ int l = i * 2; //左孩子下标 int r = i * 2 + 1; //右孩子下标 int min = i; if (l <= n && A[l] < A[i]){ min = l; } if (r <= n && A[r] < A[min]){ min = r; } if (min != i){ swap(&A[i], &A[min]); MIN_HEAPIFY(A, min, n); }}void MAX_HEAPIFY(int A[], int i, int n){ int l = i * 2; //左孩子下标 int r = i * 2 + 1; //右孩子下标 int large = i; if (l <= n && A[l] > A[i]){ large = l; } if (r <= n && A[r] > A[large]){ large = r; } if (large != i){ swap(&A[i], &A[large]); MAX_HEAPIFY(A, large, n); //递归,调整交换后的结点 }}void swap(int *a, int *b){ //交换元素 int temp = *b; *b = *a; *a = temp;}
阅读全文
0 0
- [数据结构]堆排序的C语言简单实现
- 数据结构之---C语言实现堆排序
- 数据结构之堆排序C语言实现
- 堆排序的实现-C语言
- 堆排序的C语言实现
- 堆排序的c语言实现
- 堆排序的C语言实现
- C语言堆排序的实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序--C语言实现
- C语言实现堆排序
- 堆排序--C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- C语言实现堆排序
- Object类
- bzoj1036树链剖分模板题
- Scapy学习笔记一
- 调试器试图再次打电话
- Aspects 是什么,解决了什么问题?
- [数据结构]堆排序的C语言简单实现
- MySQL的索引的实现方式以及Btree索引和hash索引的区别
- leetcode题解-92. Reverse Linked List II
- 通达OA2017破解版完美小版合同管理组件无限授权文件
- Git的使用--如何将本地项目上传到Github
- NIO相关基础篇一
- 大海2015追剧榜
- Scanner类
- LeetCode题解:123. Best Time to Buy and Sell Stock III