选择排序-堆排序
2016-06-10 11:04
288 查看
堆排序的JAVA实现
import java.util.Arrays; //堆排序之JAVA代码实现 public class HeapSort { /** * s * * @param array * 要排序的数组。 * @param parent * 每次生成堆选取的选取的第一个非终端节点。 * @param length * 参与到生成的堆过程中的元素个数。 */ public void HeapAdjust(int[] array, int parent, int length) { int temp = array[parent]; // temp保存当前父节点 int child = 2 * parent + 1; // 先获得左孩子 while (child < length) { // 如果有右孩子结点,并且右孩子结点的值大于左孩子结点,则选取右孩子结点 if (child + 1 < length && array[child] < array[child + 1]) { child++; } // 如果父结点的值已经大于孩子结点的值,则直接结束 if (temp >= array[child]) break; // 把孩子结点的值赋给父结点 array[parent] = array[child]; // 选取孩子结点的左孩子结点,继续向下筛选 parent = child; child = 2 * parent + 1; } array[parent] = temp;// 把最初的值(父节点)放到最后的子节点的位置 } public void heapSort(int[] list) { // 循环建立初始堆 for (int i = list.length / 2 - 1; i >= 0; i--) { HeapAdjust(list, i, list.length); } // 进行n-1次循环,完成排序 for (int i = list.length - 1; i > 0; i--) { // 最后一个元素和第一元素进行交换,相当于把最大的元素沉淀到最后的位置上;把最后位置上的数字放入前面等待下次堆排序 int temp = list[i]; list[i] = list[0]; list[0] = temp; // 筛选 R[0] 结点,得到i个结点的堆 HeapAdjust(list, 0, i);// 随着循环的进行,每次参与堆排序的序列会逐次减少,知道最后只剩 System.out.format("第 %d 趟: \t", list.length - i); printPart(list, 0, list.length - 1); } } // 打印序列 public void printPart(int[] list, int begin, int end) { for (int i = 0; i < begin; i++) { System.out.print("\t"); } for (int i = begin; i <= end; i++) { System.out.print(list[i] + "\t"); } System.out.println(); } public static void main(String[] args) { HeapSort hs = new HeapSort(); int array[] = new int[] { 2, 1 }; hs.heapSort(array); System.out.println(Arrays.toString(array)); } }
相关文章推荐
- JavaScript演示排序算法
- 算法之排序算法的算法思想和使用场景总结
- PHP版本常用的排序算法汇总
- JavaScript实现多种排序算法
- php 地区分类排序算法
- js三种排序算法分享
- Javascript中的常见排序算法
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
- 使用Java实现希尔排序算法的简单示例
- 排序算法的javascript实现与讲解(99js手记)
- 图文详解Heap Sort堆排序算法及JavaScript的代码实现
- C++中十种内部排序算法的比较分析
- Java实现几种常见排序算法代码
- 浅谈javascript实现八大排序
- C语言演示对归并排序算法的优化实现
- PHP常用的排序和查找算法
- JavaScript中九种常用排序算法
- STl中的排序算法详细解析
- 算法学习入门之使用C语言实现各大基本的排序算法
- PHP四种基本排序算法示例