首页 简单_堆排序算法

简单_堆排序算法

举报
开通vip

简单_堆排序算法简单_堆排序算法 package sunfa.sort; import java.util.Arrays; import java.util.Comparator; import java.util.Random; public class HeapSort { public static void main(String[] args) { int n = 20; Random ran = new Random(); int[] arr = new int[n]; Heap heap = ne...

简单_堆排序算法
简单_堆排序算法 package sunfa.sort; import java.util.Arrays; import java.util.Comparator; import java.util.Random; public class HeapSort { public static void main(String[] args) { int n = 20; Random ran = new Random(); int[] arr = new int[n]; Heap heap = new Heap(n, new Comparator() { public int compare(Integer o1, Integer o2) { o1; return o2 - } }); for (int i = 0; i < n; i++) { int o = ran.nextInt(100); arr[i] = o; heap.add(o); } System.out.println(Arrays.toString(arr)); // System.out.println(Arrays.toString(heap.getHeap())); // System.out.println(heap.getHeap()[heap.count()]); // heap.swap(heap.getHeap(), 1, heap.count()); // System.out.println("swap:" + Arrays.toString(heap.getHeap())); // heap.heapify(1, heap.count()); System.out.println(Arrays.toString(heap.getHeap())); System.out.println("堆排序:"); /** * 堆排序的思想是:
* 以最大堆为例
* ?把堆头和堆尾2个数交换
* ?将堆头到堆尾-1这个范围内的数进行堆化
* 重复上面2个步骤直到?步中要被堆化的数据长度为1
* * 算法 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
* 堆[排序的时间,主要由建立初始]堆和反复重建堆这两 部分的时间开销构成,它们均是通过调用Heapify实现的。
堆排序的最坏时间复杂度为O(nlogn)。堆序的平均性能 较接近于最坏性能。
由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。
堆排序是就地排序,辅助空间为O(1),
它是不稳定的排序方法。
*/ int last = heap.count(); while (last - 1 > 1) { heap.swap(heap.getHeap(), 1, last--); if (last - 1 > 1) { heap.heapify(1, last); } System.out.println("堆化后:" + ",last:" + last + Arrays.toString(heap.getHeap())); } } } class Heap { private Object[] heap; private int size; Comparator comp; public Object[] getHeap() { return heap; } public int count() { return size; } public Heap(int n, Comparator c) { if (n < 0) throw new IllegalArgumentException("n:" + n); comp = c; heap = new Object[n]; } public void add(E e) { if (size + 1 == heap.length) heap = Arrays.copyOf(heap, heap.length << 1); heap[++size] = e; fixUp(size); } private void fixUp(int k) { while (k > 1) { int p = k >>> 1; if (compare((E) heap[k], (E) heap[p]) > 0) break; swap((E[]) heap, k, p); k = p; } } public void swap(Object[] e, int a, int b) { Object t = e[a]; e[a] = e[b]; e[b] = t; } private int compare(E t1, E t2) { return comp == null ? (((Comparable) t1).compareTo(t2)) : (comp .compare(t1, t2)); } private void fixDown(int k) { int j; while ((j = k << 1) <= size) { if (j < size && compare((E) heap[j], (E) heap[j + 1]) > 0) j++; if (compare((E) heap[k], (E) heap[j + 1]) < 0) break; swap((E[]) heap, k, j); k = j; } } /** * 对指定范围内的数据进行堆化 * @param a 开始索引 * @param b 结束索引 */ public void heapify(int a, int b) { for (int i = b; i >= a; i--) { fixUp(i); } } }
本文档为【简单_堆排序算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_105949
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:6
分类:生活休闲
上传时间:2017-10-27
浏览量:7