【算法学习】排序算法-堆排序
来源:互联网 发布:修合无人见存心天地知 编辑:程序博客网 时间:2024/05/16 19:08
思想:
对全部元素n-1建立大顶堆后,将顶与最后一个元素交换;
而后对n-2个元素建堆,将顶与倒数第二个元素交换;
直到最后两个元素建堆。
C代码
#include "stdio.h"void array_printf(int a[],int n);void sort_heap(int a[],int n);void build_heap(int a[],int e);int main(){int i,a[] = {5,4,3,2,10,9,17,4,2,19,11};int n = sizeof(a)/sizeof(int);sort_heap(a,n);array_printf(a,n);return 0;}void array_printf(int a[],int n){int i ;for (i = 0; i < n; ++i){printf("%d ",a[i]);}printf("\n");}void sort_heap(int a[],int n){int i,x ;for(i=n-1;i>0;i--){build_heap(a,i);x=a[0];a[0] = a[i];a[i] =x;}}void build_heap(int a[],int e){int r,i;int x;for(i=e;i>=1;i--){r=(i-1)/2;if(a[r]<a[i]){x=a[r];a[r] =a[i];a[i] = x;}}}
java代码
import java.util.List;public class SortHeap implements Sort {@Overridepublic void sort(List<Integer> source) {for(int i = source.size()-1 ; i>0 ; i--){build_heap(source, i);switch_list_elements(source, 0, i);}}private void build_heap(List<Integer> source, int e){if(e>=source.size())return;for(int i = e; i>0 ; i--){int root = (i-1)/2;if(source.get(root)<source.get(i))switch_list_elements(source, root, i);}}private void switch_list_elements(List<Integer> source,int a, int b){int x = source.get(a);source.set(a, source.get(b));source.set(b, x);}}
0 0
- 算法学习之排序算法:堆排序
- 【算法学习】排序算法-堆排序
- 算法学习笔记----堆排序
- 堆排序HeapSort算法学习
- 算法学习之--堆排序
- [算法学习]20150414.2.堆排序
- 算法学习笔记--堆排序
- 算法学习之一:堆排序
- 排序算法--堆排序
- 排序算法-堆排序
- 排序算法---堆排序
- 【排序算法】堆排序
- 排序算法-堆排序
- 排序算法---堆排序
- 排序算法--堆排序
- 排序算法----堆排序
- 排序算法--堆排序
- 排序算法 堆排序
- 第一次Android作业
- Unity新UI系统概述——Canvas
- nyoj 491 幸运三角形 【DFS】+【打表】
- iOS 开发如果涉及数据和表的持久化,Core Data 比 SQLite 更好吗?
- ios 中数组和字典的最新使用方法研究
- 【算法学习】排序算法-堆排序
- Xcode中本地化设置位置示意图
- sqlite3 语句总结
- 邻接矩阵的基本操作
- git 打标签
- ISTQB考试介绍
- 『ANDROID』android的消息处理机制—Looper/Handler/Message
- (连载)边喝咖啡边学Unity——第二章 预备知识体系(2)
- 第14周项目1-折腾二维数组