详解如何在Java中实现堆排序算法
更新时间:2022年03月25日 09:35:36 作者:之一Yo
这篇文章主要为大家详细介绍了如何利用Java实现堆排序算法堆排序算法java,具有一定的参考价值堆排序算法java 详解如何在Java中实现堆排序算法,感兴趣的小伙伴们可以参考一下
目录
算法描述
堆排序算法的描述如下:
实现代码
<pre class="brush:java;">package com.zhiyiyo.collection.sort;
import java.util.Arrays;
public class HeapSort extends BaseSort {
@Override
public void sort(Comparable[] array) {
int N = array.length;
// 创建最大堆
<p>
for (int i = N / 2; i >= 0; i--) {
sink(array, i, N);
}
// 就地排序
while (N > 0) {
// 将最大的元素移动到数组的尾部,同时将未排序的长度-1
swap(array, 0, --N);
// 调整最大堆
sink(array, 0, N);
}
}
/**
* 下沉元素
*
* @param array 数组
* @param k 下沉的元素索引
*/
private void sink(Comparable[] array, int k, int N) {
while (2 * k + 1 < N) {
int j = 2 * k + 1;
if (j < N - 1 && less(array[j], array[j + 1])) j++;
if (!less(array[k], array[j])) break;
swap(array, k, j);
k = j;
}
}
}
</pre></p>
抽象类的代码为:
<pre class="brush:java;">package com.zhiyiyo.collection.sort;
/**
- 数组排序抽象类
*/
public abstract class BaseSort {
public abstract void sort(Comparable[] array);
/**
* 交换数组元素
*
* @param array 数组
* @param a 数组下标 a
* @param b 数组下标 b
<p>
*/
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.compareTo(b) < 0;
}
}
</pre></p>
测试代码
<pre class="brush:java;">package com.zhiyiyo.collection.sort;
<p>
import org.junit.Test;
import java.util.Arrays;
public class HeapSortTest {
@Test
public void sort() {
Integer[] array = {5, 10, 9, 6, 8, 7, 2, 1, 4, 3};
new HeapSort().sort(array);
System.out.println(Arrays.toString(array));
}
}
</pre></p>
最终排序结果为 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]堆排序算法java,以上~
到此这篇关于详解如何在Java中实现堆排序算法的文章就介绍到这了,更多相关Java堆排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!