八大排序算法之-堆排序 java代码
来源:互联网 发布:java退格 编辑:程序博客网 时间:2024/06/05 15:02
import java.util.Arrays;/** * Created by Administrator on 2017/8/2. */public class heapSort_select { public static void main(String args[]) { int[] arr = { 6, 9, 1, 3, 1, 2, 2, 5, 6, 1, 3, 5, 9, 7, 2, 5, 6, 1, 9 }; //[1, 1, 1, 1, 2, 2, 2, 3, 3, 5, 5, 5, 6, 6, 6, 7, 9, 9, 9] heapSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } /*算法思想: * 大根堆:根部最大,可用于求最小k个数 * 小根堆:根部最小,可用于求最大k个数 * * 1.首先将序列构建成大根堆 * 2.取出当前最大堆根节点,将其与序列末尾的元素进行交换; * (此时,序列末尾的值已经是最大值) * 3.对交换后的n-1个元素进行调整,使其满足大顶堆的性质 * 4.重复2,3直到堆中只有一个元素为止*/ /*时间复杂度:O(nlogn) * 空间复杂度:*/ private static void heapSort(int[] arr, int start, int end) { /*if (arr==null || arr.length<=1) { }*/ for (int i = 0; i<=end; i++) { heapInsert(arr,arr[i],i); } System.out.println(Arrays.toString(arr)); for (int i = end - 1; i>=0; i--) { swap(arr,0,i+1); selfBalanceHeap(arr,0,i); } } private static void selfBalanceHeap(int[] heap, int index, int end) { int left = index * 2 + 1; int right = index * 2 + 2; int largest = index; while (left<=end) { if ( heap[left]>heap[index]) { largest = left; } if (right<=end && heap[right]>heap[largest]) {//此处应该和heap【largest】进行比较,即最大值,否则会出错 largest = right; } if (index!=largest) { swap(heap,index,largest); }else { break; } index = largest; left = index*2 +1; right = index*2+2; } } private static void heapInsert(int[] heap, int value, int index) { heap[index] = value; while (index!=0) { int parent = (index - 1)/2; if (heap[parent] <heap[index]) { swap(heap,parent,index); index = parent; }else { break; } } } private static void swap(int[] heap, int parent, int index) { int tmp = heap[parent]; heap[parent] = heap[index]; heap[index] = tmp; }}
阅读全文
0 0
- 八大排序算法之-堆排序 java代码
- 八大排序算法之-基数排序 java代码
- 八大排序算法之堆排序
- 八大排序算法之堆排序解析
- 八大排序算法之堆排序
- 八大排序算法之-直接插入排序 java代码
- 八大排序算法之-希尔排序 java代码
- 八大排序算法之-快速排序 java代码
- 八大排序算法之-冒泡排序 java代码
- 八大排序算法之-选择排序 java代码
- 八大排序算法之-归并排序 java代码
- 八大排序算法-堆排序
- 八大排序算法--堆排序
- 八大排序算法-堆排序
- 八大排序算法 之 堆排序(二叉树排序)
- 八大排序算法及完整c代码—堆排序c、java代码
- 八大排序之堆排序
- 八大排序之堆排序
- Java获取客户端IP
- 设计模式之外观模式
- 两个输出文件名解析为同一个输出路径:“obj\x86\Debug\xxxxxxxxxxxxx.resources”
- 什么是java 序列化,如何实现java 序列化?
- 关于官网例子程序的运行失败【tutorial文件夹】
- 八大排序算法之-堆排序 java代码
- scala之函数编程进阶
- POJ-The Suspects
- SSH框架整合
- 编译PHP报错:make: *** [ext/fileinfo/libmagic/apprentice.lo]
- AbstractQueuedSynchronizer深度学习(独占锁)
- 【HDU1969】Pie(二分法)
- UVa10092: The Problem with the Problem Setter 题解
- QSettings 读写配置文件