Java实现排序算法——堆排序
2016-09-26 12:02
225 查看
堆排序(Heap Sort)算法是基于选择排序思想的,其利用堆结构和二叉树的一些性质来完成数据的排序。堆排序在某些场合具有广泛的应用。
构造堆结构就是把原始的无序数据按照堆结构的定义调整,将无序数据放置到一个完全二叉树中,然后由完全二叉树的下层逐渐进行父节点数据的比较,是父节点数据大于左右子节点的数据,直到所有节点都满足条件位置。
堆排序输出:构造堆结构后根节点的数据即为数组数据最大值,然后将根节点数据与最后一个子节点数据交换输出根结点数据,在进行构造堆结构过程有得到一个最大值,反复交换数据与构造堆结构,最终完成所有数据排序。
代码如下:
堆排序过程
一个完整的堆排序需要经过反复的两个步骤:构造堆结构和堆排序输出。构造堆结构就是把原始的无序数据按照堆结构的定义调整,将无序数据放置到一个完全二叉树中,然后由完全二叉树的下层逐渐进行父节点数据的比较,是父节点数据大于左右子节点的数据,直到所有节点都满足条件位置。
堆排序输出:构造堆结构后根节点的数据即为数组数据最大值,然后将根节点数据与最后一个子节点数据交换输出根结点数据,在进行构造堆结构过程有得到一个最大值,反复交换数据与构造堆结构,最终完成所有数据排序。
代码如下:
public class HeapSort { public static void main(String[] args) { int a[]={23,15,24,36,46,37,75,66}; heapSort(a); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } private static void heapSort(int[] a) { int[] b=new int[a.length]; if(a==null||a.length<=1)return; buildHeap(a);//构造堆结构 for(int i=a.length-1;i>=1;i--){ exchangeData(a, i, 0); maxHeap(a,i,0); } } private static void buildHeap(int[] a) { int half=a.length/2; for(int i=half;i>=0;i--){ maxHeap(a,a.length,i); } } private static void maxHeap(int[] a, int length, int i) { int left=i*2+1;//左子树节点 int right=i*2+2;//右子树节点 int largest=i; if(left<length&&a[left]>a[i]){ largest=left; } if(right<length&&a[right]>a[largest]){ largest=right; } if(largest!=i){ exchangeData(a,largest,i);//交换数据,使父节点数据大于子节点 maxHeap(a,length,largest);//重新构造堆结构 } } private static void exchangeData(int[] a, int index1, int index2) { int temp; temp=a[index1]; a[index1]=a[index2]; a[index2]=temp; } }
相关文章推荐
- 【转】排序算法复习(Java实现) (二): 归并排序,堆排序,桶式排序,基数排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 排序算法之堆排序(JAVA实现)
- 排序算法(七):JAVA实现堆排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- Java实现-高效排序算法之堆排序
- 排序算法Java实现(堆排序)
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- Java实现排序算法2:堆排序
- 【排序算法】堆排序原理及Java实现
- 七大排序算法(冒泡,选择,插入,二分法排序,希尔,快速,合并,堆排序)的java实现
- 排序算法Java实现——选择排序(堆排序)
- 基础排序算法,java实现(快速,冒泡,选择,堆排序,插入)
- 排序算法--选择排序(简单选择排序、堆排序)java实现
- 【转】排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 八种排序算法Java实现-堆排序
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序