123

来源:互联网 发布:网络安全教育开题报告 编辑:程序博客网 时间:2024/04/29 07:29

wangrui

sdfsdfds

堆排序

public class HeapSort{    public static void main(String[] args){        int[] array = {9,8,7,6,5,4,3,2,1};        heapSort(array);        print(array);    }    public static void print(int[] array){        StringBuilder builder = new StringBuilder();        for(int index = 0; index < array.length; ++index){            builder.append(array[index]);            if(index != array.length - 1){                builder.append(",");            }        }        System.out.println(builder.toString());    }    //序列中以位置为i的元素为根节点的子树不是堆,但是其左右子树都为堆,调整以i为根节点的子树使其成为堆    public static void adjust(int[] array, int length, int i){        int temp = array[i];        int j = 2 * i + 1;        while(j < length){            if(j + 1 < length && array[j + 1] > array[j]){                j = j + 1;            }            if(array[j] <= temp){                break;            }            array[(j - 1)/2] = array[j];            j = j * 2 + 1;        }        array[(j - 1)/2] = temp;    }    //创建初始堆    //循环操作,将第一个元素与待排序的最后一个元素交互,然后再次调整为堆    public static void heapSort(int[] array){        int length = array.length;        for(int i = (length - 1 - 1) / 2; i >= 0; --i){            adjust(array, length, i);        }        for(int i = length - 1; i >= 1; --i){            int temp = array[i];            array[i] = array[0];            array[0] = temp;            adjust(array, i, 0);        }    }}
0 0