堆排序
Posted 512178509
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。
/** * 首先将无序序列构建成大顶堆或小顶对(父节点大于等于左右字节点的值) * arr[i]>=arr[2i+1] && arr[i]>=arr[2i+2] * 交换堆顶和末尾元素的值,重新调整堆结构 * 交换数据,重复上面的步骤 * * 第一个非叶子节点时(arr.length/2)-1 * * */ @Test public void headSort(){ int[] array = {1,4,5,6,9,0,4,3,4,5}; headSort(array); System.out.println(Arrays.toString(array)); } public void headSort(int[] array){ //构建大堆顶 for (int i=(array.length)/2-1;i>=0;i--){ //从第一个非叶子节点开始,从左到右,从下到上 ajustHead(array,i,array.length); } for (int j=array.length-1;j>0;j--){ swap(array,0,j); ajustHead(array,0,j); } } public void ajustHead(int[] array,int i,int length){ int tem=array[i]; for (int k=i*2+1;k<length;k=k*2+1){ if(k+1<length && array[k]<array[k+1]){//左右子树比较 k++; } if(array[k]>tem){ array[i]=array[k]; i=k; }else{ break; } } array[i]=tem; } public void swap(int[] array ,int a,int b){ int temp=array[a]; array[a]=array[b]; array[b]=temp; }
堆排序实践
以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章