排序之堆排序
来源:互联网 发布:直播视频美颜软件 编辑:程序博客网 时间:2024/06/05 00:36
public class HeapSort { public static void main(String[] args) { CreateNoOrderArray createNoOrderArray = new CreateNoOrderArray(); int[] array = createNoOrderArray.creat(); System.out.println("Before heap:"); System.out.println(Arrays.toString(array)); heapSort(array); System.out.println("After heap sort:"); System.out.println(Arrays.toString(array)); } /** * 堆排序 * @param array */ private static void heapSort(int[] array) { if (array == null || array.length <= 1) { return; } buildMaxHeap(array); for (int i = array.length - 1; i >= 1; i--) { swap(array, 0, i); //每次把最大的换到最后 heapify(array, i, 0); //重新把次大的调整到根节点 } } /** * 构造最大堆 * @param array */ private static void buildMaxHeap(int[] array) { if (array == null || array.length <= 1) { return; } int half = array.length / 2; for (int i = half; i >= 0; i--) { //从最后一个节点的父节点开始调整,使根节点是最大的 heapify(array, array.length, i); } } /** * 从index向下调整 * @param array * @param heapSize * @param index */ private static void heapify(int[] array, int heapSize, int index) { int left = index * 2 + 1; int right = index * 2 + 2; int largest = index; while(left < heapSize){ if (array[left] > array[index]) { largest = left; } if (right < heapSize && array[right] > array[largest]) { largest = right; } if (index != largest) { swap(array, index, largest); }else { break; } index = largest; left = index * 2 + 1; right = index * 2 + 2; } } private static void swap(int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; }}
阅读全文
1 0
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序之堆排序
- 排序算法之堆排序
- 排序算法之堆排序
- 模板方法模式
- 关于python爬虫入门
- nginx 安装
- 最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件
- 【个性化】Windows10系统的个性化设置
- 排序之堆排序
- 小白入门---HTML5标签canvas
- jquery
- JAVA环境变量配置详细步骤和JDK1.8详细安装步骤
- 简单的新标签们(待添加)
- JavaScript 教程一: 认识JavaScript
- 排序之快排
- Servlet简介
- 矩形的个数