堆排序
来源:互联网 发布:最全的php扩展开发教程 编辑:程序博客网 时间:2024/05/20 18:50
package com.lin.test;public class Sort {// 新加入i结点 其父结点为(i - 1) / 2static void MinHeapFixup(int a[], int i) {int j, temp;temp = a[i];j = (i - 1) / 2; // 父结点while (j >= 0 && i != 0) {if (a[j] <= temp)break;a[i] = a[j]; // 把较大的子结点往下移动,替换它的子结点i = j;j = (i - 1) / 2;}a[i] = temp;}// 在最小堆中加入新的数据nNumstatic void MinHeapAddNumber(int a[], int n, int nNum) {a[n] = nNum;MinHeapFixup(a, n);}// 从i节点开始调整,n为节点总数 从0开始计算 i节点的子节点为 2*i+1, 2*i+2static void MinHeapFixdown(int a[], int i, int n) {int j, temp;temp = a[i];j = 2 * i + 1;while (j < n) {if (j + 1 < n && a[j + 1] < a[j]) // 在左右孩子中找最小的j++;if (a[j] >= temp)break;a[i] = a[j]; // 把较小的子结点往上移动,替换它的父结点i = j;j = 2 * i + 1;}a[i] = temp;}// 在最小堆中删除数static void MinHeapDeleteNumber(int a[], int n) {// Swap(a[0], a[n - 1]);int temp = a[0];a[0] = a[n - 1];a[n - 1] = temp;MinHeapFixdown(a, 0, n - 1);}// 建立最小堆static void MakeMinHeap(int a[], int n) {for (int i = n / 2 - 1; i >= 0; i--)MinHeapFixdown(a, i, n);}//开始排序static void MinheapsortTodescendarray(int a[], int n) {// 最小堆MakeMinHeap(a, a.length);for (int i = n - 1; i >= 1; i--) {// swap(a[i],a[0])int temp = a[i];a[i] = a[0];a[0] = temp;MinHeapFixdown(a, 0, i);}}public static void main(String[] args) {int a[] = { 3, 2, 5, 7, 8, 9, 4, 1, 0, 4, 6 };int[] temp = new int[a.length];MinheapsortTodescendarray(a, a.length);for (int i : a) {System.out.print(i + " ");}}}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- Perl语言入门——目标操作
- Perl语言入门——进程管理
- Perl语言入门——高级Perl技巧
- [文档管理]QuickOffice轻松文档
- C#程序无法在64位系统下的解决办法
- 堆排序
- grass using LibGDX
- linux回顾
- 关于Grunt,从一个简单的配置开始!
- Git详解四
- 代码面试最常用的10大算法
- 循序渐进实现仿QQ界面(一):园角矩形与双缓冲贴图窗口
- C#综合细说进程、应用程序域与上下文
- 利用MATLAB计算三维坐标序列距离误差程序