堆排序
来源:互联网 发布:java发邮件 编辑:程序博客网 时间:2024/06/05 09:50
原理图如下:
思路如下:
以一个子树为单位,向上遍历。判断同父两个叶子大小(若只有一个跳过),选出最大。判断大的那个叶子节点与父节点,若父节点比大的叶子节点小则交换值。如此反复。
实现如下:
/* 堆排序 罗进瑶完成于2016-8-8 *********main.c*****************/#include<stdio.h>void show(int *a, int size){int i;for (i = 0;i <size;i++)printf("%d、", a[i]);}void findmax(int *a,int size){int i, parent, child,temp;for (i = size - 1;i > 0;i--){ child=i;parent = child / 2;if (child + 1 < size&&a[child + 1] > a[child])child++;if (a[parent] < a[child]){temp = a[parent];a[parent] = a[child];a[child] = temp;}}}void HeapSort(int *a, int size){int i,temp;for (i = size;i > 0;i--){findmax(a, i);temp = a[0];a[0] = a[i - 1];a[i - 1] = temp;}}int main(void) {//int a[10] = { 10,9,8,7,6,5,4,3,2,1};int a[10] = { 1,2,3,4,5,6,7,8,9,10 };printf("原数据:");show(a, 10);printf("\n排序后:");//findmax(a, 10);HeapSort(a, 10);show(a, 10);putchar('\n');return 0;}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- Android静态扫描出的问题
- SQLi Labs Lesson20
- HDU:2087 剪花布条(KMP)
- UVA 10305 Ordering Tasks
- 车牌定位方法——matlab
- 堆排序
- adb
- jzoj2573 序列
- Android开发之RecyclerView完全解析(一)
- 牛的旅行(travel)
- Java中的动态接口实现
- 关于编译报错“dereferencing pointer to incomplete type..
- 2559. 【NOIP2011模拟9.9】最短路 (StandardIO)
- 关于子窗体打开被父窗体内的图片框遮挡而不显示的问题