堆排序

来源:互联网 发布:pkpm钢结构设计软件 编辑:程序博客网 时间:2024/06/16 00:54

将优先队列变成一种排序方法

用下沉操作由N个元素构造堆只需要少于2N次比较以及少于N次交换

将N个元素排序,只需要少于(2NlgN+2N)次比较(以及一半次数的交换)

private static void sink(Comparable[] a,int k,int n) {while(2*k<n){int j=2*k;if (j<n&&a[j+1].compareTo(a[j])<0) j++;if (a[j].compareTo(a[k])<=0) break;exch(a,k,j);k=j;}}public static  void exch(Comparable[] a,int i,int j) {Comparable t=a[i];a[i]=a[j];a[j]=t;}public static void sort(Comparable[] a) {int N=a.length;//构造堆for (int k = N/2; k >=1; k--) {sink(a,k,N);}//while循环将最大的元素a[1]和a[N]交换并且修复了堆while (N>1) {exch(a, 1, N--);sink(a, 1, N);}}

0 0
原创粉丝点击