优先队列(二叉堆实现) + 堆排序
2017-08-05 15:18
525 查看
优先队列
堆排序
public class Priority_queue { private int[] a; private int count; Priority_queue(int[] b) { a = new int[b.length + 1]; for (int i = 1; i < a.length; ++i) a[i] = b[i - 1]; count = b.length; //形成堆 for (int k = count / 2; k >= 1; --k) sink(k,count); //a[0] for 哨兵 sentry } private void sink(int k,int N) { while (2 * k <= N) { int j = 2 * k; while (j < N && a[j] < a[j + 1]) ++j; if (a[k] > a[j]) break; int temp = a[j]; a[j] = a[k]; a[k] = temp; k = j; } } private void swim(int k) { while (k > 1 && a[k] > a[k / 2]) { int temp = a[k]; a[k] = a[k / 2]; a[k / 2] = temp; k = k / 2; } } public boolean isEmpty() { return count == 0; } private void resize(int n) { int[] temp = new int ; for (int i = 1; i <= count; ++i) temp[i] = a[i]; a = temp; } public Object deleteMax() { if (isEmpty()) return null; int ret = a[1]; a[1] = a[count]; a[count--] = 0; sink(1,count); if (count == a.length / 4) resize(a.length / 2); return ret; } public boolean isFull() { return count == a.length - 1; } public void insert(int i) { if (isFull()) resize(2 * count); a[++count] = i; swim(count); } }
堆排序
import edu.princeton.cs.algs4.StdOut; import edu.princeton.cs.algs4.StdRandom; public class HeapSort { private int[] a; public HeapSort(int N) { a = new int ; for (int i = 0; i < N; ++i) a[i] = StdRandom.uniform(-15*N,15*N); } public HeapSort(int[] b) { a = new int[b.length]; for (int i = 0; i < a.length; ++i) a[i] = b[i]; } public void sink(int k,int N) { while (2*k + 1 <= N) { int j = 2 * k + 1; while (j < N && a[j] < a[j + 1]) ++j; if (a[k] > a[j]) break; int temp = a[j]; a[j] = a[k]; a[k] = temp; k = j; } } public void sort() { int N = a.length - 1; for (int k = (N - 1) / 2; k >= 0; --k) { sink(k,N); } while (N >= 1) { int temp = a[0]; a[0] = a ; a[N--] = temp; sink(0,N); } } public void display() { for (int i = 0; i < a.length; ++i) StdOut.print(a[i] + " "); StdOut.println(); } }
相关文章推荐
- 二叉堆,堆排序,STL优先队列的底层实现,剑指offer数据流中的中位数
- 基于二叉堆实现的优先队列和堆排序
- 算法基础:排序(四)——二叉堆、优先队列、堆排序——Python实现
- 算法基础:排序(四)——二叉堆、优先队列、堆排序——Python实现
- 堆的实现、堆排序、优先队列
- 二叉堆实现优先队列
- 优先队列 之 堆排序实现(堆排序思想)
- java编程实现优先队列的二叉堆代码分享
- 优先队列(二叉堆)的基本实现
- 排序算法(四):优先队列、二叉堆以及堆排序
- PriorityBlockingQueue优先队列的二叉堆实现
- 堆排序实现优先队列
- 使用二叉堆实现优先队列
- 用java实现一个基于堆排序的优先队列
- [模板] 二叉堆 - 优先队列的二叉堆数组实现
- 每日一省————使用二叉堆实现优先队列
- 优先队列的简单实现-二叉堆实现
- 自己实现一个简单的优先队列-二叉堆
- 算法学习 - 优先队列的二叉堆实现
- 用二叉堆实现优先队列