堆排序算法

来源:互联网 发布:南京seo公司优化 编辑:程序博客网 时间:2024/06/17 13:37
public class heapsort {//构成堆public static int[] heap(int[] a,int n) {int t;
//从最后一个非叶结点开始按照从大到小进行堆构建for (int i = n/2; i > 0; i--) {
if (i*2+1>n) {//如果最后一个非叶结点只有左子树if (a[i-1]<a[i*2-1]) {//如果子树数据大于根结点数据,交换数据t=a[i-1];a[i-1]=a[i*2-1];a[i*2-1]=t;}} else {//如果非叶结点有两个子树,如果子树中的大数据比根结点大,交换数据if (a[i*2]<a[2*i-1] && a[i-1]<a[i*2-1]) {t=a[i-1];a[i-1]=a[i*2-1];a[i*2-1]=t;} else if (a[i*2]>a[2*i-1] && a[i-1]<a[i*2]){t=a[i-1];a[i-1]=a[i*2];a[i*2]=t;}}}return a;}
//堆排序public static int[] sort(int[] a) {int n=a.length;int t;
//当数组中还有数据,将根结点中的数据取出,放入数组尾部while (n>0) {heap(a, n);t=a[0];a[0]=a[n-1];a[n-1]=t;n--;}return a;}}

0 0
原创粉丝点击