[JAVA]堆排

来源:互联网 发布:保姆偷喝母乳 知乎 编辑:程序博客网 时间:2024/05/22 08:06

这不马上秋招了吗,熟悉熟悉算法,根据网上的原理写个堆排发现跟给的代码不一样,,,有错误请大家指出。。。

public class HeapSort {    public static void main(String[] args) {        int [] a={49,38,65,97,71,13,27,49,78,34,12,64,1};        int arrayLength = a.length;        for(int i=0;i<arrayLength-1;i++){            creatHeap(a,arrayLength-1-i);            swap(a,0,arrayLength-1-i);        }        for(int i =0;i<a.length;i++){            System.out.print(a[i]+" ");        }    }    static void creatHeap(int datas[],int lastIndex){//lastIndex=Length-1        for(int i=(lastIndex-1)/2;i>=0;i--){            int p = i;//根节点            int l = 2*p+1;//左儿子(由i=(lastIndex-1)/2 可得知左儿子必存在)            if(lastIndex>l){// 右儿子存在                if(datas[l]<datas[l+1]){                    swap(datas,l,l+1);                }            }            if(datas[p]<datas[l]){                swap(datas,p,l);            }        }    }    static void swap(int[] data, int i, int j) {        int tmp=data[i];        data[i]=data[j];        data[j]=tmp;    }}
0 0
原创粉丝点击