堆排序

来源:互联网 发布:陈道明和陈宝国 知乎 编辑:程序博客网 时间:2024/06/05 13:58

nodeJs实现

function heapSort (list) {    if (list == undefined || list.length == 0) return;    buildMaxHeap(list);    for (var i = list.length - 1; i >= 0; i--) {        var temp = list[0];        list[0] = list[i];        list[i] = temp;        maxHeap(list, i - 1, 0);    }}function buildMaxHeap (list) {    if (list == undefined || list.length == 0) return;    var half = list.length / 2;    for (var i = half - 1; i >= 0; i--) {        maxHeap(list, list.length - 1, i);    }} function maxHeap (list, heapSize, index) {    var left = 2 * index + 1;    var right = 2 * index + 2;    var largest = index;    var temp;    if (left <= heapSize && list[left] > list[largest]) {        largest = left;    }    if (right <= heapSize && list[right] > list[largest]) {        largest = right;    }    if (largest != index) {        temp = list[index];        list[index] = list[largest];        list[largest] = temp;        maxHeap(list, heapSize, largest);    }}var nums = [3, 8, 1, 6, 5, 4, 7, 2, 9, 0];heapSort(nums);for (var i = 0; i < nums.length; i++) {    console.log(nums[i]);}

Java实现

package cn.mitsuhide.javabase;public class SortAll {    public static void main(String[] args) {        // TODO Auto-generated method stub        int [] list = {3,8,1,6,5,4,7,2,9};        SortAll sa = new SortAll();        sa.heapSort(list);        for (int i = 0; i < list.length; i++) {            System.out.print(list[i] + " ");        }    }    //交换节点    public void swapItem(int a, int b, int [] list) {        int t = list[a];        list[a] = list[b];        list[b] = t;    }    //堆排序    public void heapSort(int [] list) {        buildMaxHeap(list);        for (int i = list.length - 1; i >= 0; i--) {            this.swapItem(i, 0, list);            this.maxHeap(list, i, 0);        }    }    //首先建立最大堆    public void buildMaxHeap(int [] list) {        int begin = list.length/2 - 1;        for (int i = begin; i >= 0; i--) {            this.maxHeap(list, list.length, i);        }    }    //递归调整堆    public void maxHeap(int [] list, int heapSize, int index) {        int left = 2 * index + 1;        int right = 2 * index + 2;        int largest = index;        if (left < heapSize && list[left] > list[largest]) {            largest = left;        }        if (right < heapSize && list[right] > list[largest]) {            largest = right;        }        if (largest != index) {            this.swapItem(largest, index, list);            maxHeap(list, heapSize, largest);        }    }}
0 0