排序:堆排序
来源:互联网 发布:js模拟鼠标移动 编辑:程序博客网 时间:2024/06/01 09:56
#include <stdio.h>// 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;}// 打印数组void printA (int *a, int len){int i;for (i = 0; i < len; i++){printf ("%4d", a[i]);}printf ("\n");}// a 代表一个数组// i 代表要调整的结点的下标// len 数组的长度void heapify(int *a, int i, int len){int left = 2 * i + 1; // 左孩子结点下标int right = 2 * i + 2; // 右孩子结点下标int max = i; // 三个节点中最大元素的下标if (left < len && a[left] > a[max])max = left;if (right < len && a[right] > a[max])max = right;if (max != i) // 当前父节点不是所有结点中最大的元素,需要做调整{swap (a, i, max);heapify (a, max, len); // 调整被交换的结点}}void heapSort (int *a, int len){// 建堆int i;for (i = len/2 - 1; i >= 0; i--){heapify (a, i, len);}// 排序for (i = len-1; i > 0; i--){swap (a, 0, i); // 拿堆顶元素与队尾元素进行交换len--; // 找到一个最大元素以后堆大小减1heapify (a, 0, len); // 调整堆顶元素}}int main(){int a[10] = {9,6,8,0,3,5,2,4,7,1};int len = sizeof(a) / sizeof(a[0]);heapSort(a, len);printA (a, len);return 0;}
阅读全文
0 0
- 堆排序
- 堆排序
- 堆排序
- 堆排序:
- 堆排序
- 堆排序
- 堆排序
- 堆排序
- 堆排序
- 堆排序
- 堆排序
- 堆排序
- 堆排序
- 堆排序
- 堆排序
- 堆排序
- 堆排序
- 堆排序
- 斐波纳契数列
- Linux-4
- C语言贪吃蛇
- sql日期查询 中文格式转换
- 解释器模式 | Interpreter Pattern
- 排序:堆排序
- Quartz 2.2 动态添加、修改和删除定时任务
- java爬虫实战简单用Jsoup框架进行网页爬虫(如抓取网页图片)
- qq音乐常用接口整理——亲测可用
- 排序:归并
- 欢迎使用CSDN-markdown编辑器
- IDEA十大快捷键
- Python 常见文件格式 .py .pyc .pyw .pyo .pyd 之间的主要区别
- 新浪博客搬家说明