堆排序
来源:互联网 发布:粗花呢西装 知乎 编辑:程序博客网 时间:2024/06/05 14:00
堆积(heap)是树结构的第三种型态堆积是一棵二元树
参考:《算法导论(第3版)》第6章
八大排序算法
代码:
package algorithm;import java.util.Arrays;/** * Created by 刘一波 LiuYibo on 15/11/11. * E-Mail:zhanlanstar@163.com */public class HeapSortMain { public static void main(String[] args) { int[] a = {12, 3, 5, 4, 2, 1, 33, 4, 89, 22, 120, 23, 14}; HeapSort heapSort = new HeapSort(); heapSort.sort(a); System.out.println(Arrays.toString(a)); } /** * 堆排序 * <p/> * 此排序过程: * 1. 建大根堆 * 2. 把第一个数字和最后一个交换。且已排序好的个数加1。即,大根堆建好后,第一个是最大的,把它放到最后即可。 * 3. 对于除最后排序好的个数外的数组进行建堆(重复1),交换(重复2),直到结束。 * <p/> * 这不是完全按照原始算法写的代码,所以可能效率不很高。 */ static class HeapSort { /** * 建堆,建大根堆。 * 一个过程: * 1. 每一次开始时,i=n/2,i的两个子节点分别是 2*i 和 2*i+1。 * 2. 如果两个子结点的序号在数组内,分别对其进行比较,把最大的放在父结点位置。 * 3. i-- 直到退出。 * 4. 重复1,2,3 直到没有交换,则完成。 * * @param a 待排序数组 * @param sorted 已经排序好的个数 */ public void heap(int[] a, int sorted) { while (true) { int flag = 0;//交换次数,未交换表明此数组已经符合大根堆条件 for (int i = (a.length - sorted) / 2; i >= 0; i--) { int x = i * 2; int y = i * 2 + 1; System.out.println(i + " " + x + " " + y); if (y <= (a.length - sorted - 1)) { if (a[i] < a[y]) { swap(a, i, y); flag++; } } if (x <= (a.length - sorted - 1)) { if (a[i] < a[x]) { swap(a, i, x); flag++; } } } if (flag == 0) { break; } } } /** * 排序 * <p/> * 1. 大根堆的第一个是最大的,移动到最后,把最后一个放在第一个位置(交换)。 * 2. 把剩余的数调整为大根堆。 * 3. 重复1,2,直到数组排序完成。 * * @param a */ public void sort(int[] a) { heap(a, 0); for (int i = 0; i < a.length; i++) { swap(a, 0, a.length - 1 - i); heap(a, i + 1); } } public void swap(int[] numbers, int one, int tow) { int temp = numbers[one]; numbers[one] = numbers[tow]; numbers[tow] = temp; System.out.println(Arrays.toString(numbers)); } }}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- Android 手势基础 GestureDetector和SimpleOnGestureListener的使用教程
- 迟来的找工作总结
- cpu有哪些架构
- Android强制设置横屏或竖屏
- Xamarin
- 堆排序
- 新浪也遇寒冬:全面停止社招—兄弟连IT教育
- 二叉树的非递归遍历
- 关于OpenNI2和OpenCV2的那些事——获取三维点云数据并用OpenGL表示
- Android Studio背景换图片跟一些比较好用插件的介绍
- ConfigurationManager.AppSettings["XXX"] 读取配置文件
- HTTPS、SPDY和HTTP/2的性能比较
- CSU--1541-- There is No Alternative
- NET MVC中 DropDownList的BUG