一、堆排序的 JAVA 实现
堆排序:是一种树形选择排序,在排序中,将待排序的记录r[1..n]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系,在当前无序中选择关键字最大(或最小)的记录。
下面直接代码实现
package HeapSort;public class HeapingSort { public void HeapSort(int a[]){ CreapHeap(a); for (int i=a.length-1;i>0;--i){ a[0]=a[1]; a[1]=a[i]; a[i]=a[0]; HeapAdjust(a,1,i-1); } for (int i=1;i=a[i]) //比较mid 和 上次比较得到的最大值,若是满足,则就是堆 ,直接结束循环。若是不满足,则进行交换。 break; a[mid]=a[i]; mid=i; } a[mid]=hc; } public void CreapHeap(int a[]){ for (int i=(a.length-1)/2;i>0;--i){ //调整堆, HeapAdjust(a,i,a.length-1); } } public static void main(String[] args) { int[] a=new int[]{ 0,38,65,97,76,13,27,49}; new HeapingSort().HeapSort(a); }
3、算法分析:
a、时间复杂度:O(nlog2n)b、空间复杂度:O(1)4、算法特点a、是不稳定的排序b、只能用于顺序结构,不能用于链式