java堆排序算法代码,堆排序的实现
00-1010算法描述实现代码测试代码
00-1010堆排序算法描述如下:
将待排序的数组调整到最大堆,其中未排序长度N为数组长度,调整过程为逆序下沉数组前N/2个元素的过程。每次下沉都会把较大的元素带到最上面,最后把数组变成最大堆;弹出最大堆的顶元素并移动到数组的后面,将原来的后面元素放在堆的顶部,然后将数组的前N个元素调整为未排序长度为N- 1的最大堆;重复步骤2,直到未排序长度为0。
目录
包com . zhi yiyo . collection . sort;导入Java . util . arrays;public class HeapSort扩展了BaseSort { @ Override public void sort(Comparable[]array){ int N=array . length;//为(int i=N/2)创建最大堆;I=0;i - ) { sink(array,I,N);}//Sort while(N 0)in place {//将最大的元素移动到数组末尾,同时移动未排序的length - 1 swap(array,0,-N N);//调整最大堆接收器(array,0,N);} }/* * * sinking element * * @ param array array * @ param k sinking element index */private void sink(comparable[]array,int k,int n){ while(2 * K1n){ int j=2 * K1;if (j N - 1 less(array[j],array[j 1]))j;如果(!less(array[k],array[j]))break;swap(array,k,j);k=j;}}}抽象类BaseSort的代码是:
包com . zhiyiyo . collection . sort;/* * * array sort抽象类*/public abstract class base sort { public abstract void sort(comparable[]array);/* * *交换数组元素* * @ param array array * @ param a array下标a * @param b array下标b */protected static void swap(comparable[]array,int a,int b){ comparable tmp=array[a];array[a]=array[b];array[b]=tmp;} protected static boolean less(Comparable a,Comparable b){ return a.compare to(b)0;}}
算法描述
包com . zhi yiyo . collection . sort;导入org . JUnit . test;导入Java . util . arrays;public class HeapSortTest { @ Test public void sort(){ Integer[]array={ 5,10,9,6,8,7,2,1,4,3 };新堆排序()。排序(数组);system . out . println(arrays . tostring(array));}}最终排序结果是[1,2,3,4,5,6,7,8,9,10],以上~
关于如何用Java实现堆排序算法的这篇文章到此结束。更多相关Java堆排序内容,请搜索热门IT以前的文章或者继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。