堆排序

来源:互联网 发布:最全的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
原创粉丝点击