[数据结构与算法]——堆排序及按顺序排序
2019-04-30 10:27
375 查看
堆排序:
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。
点击这里查看详情
知识点:封装函数;堆的排序;
注意事项: int start = (arr.length-x)/2; x=1,2结果一样,最终取得都是倒数第二层的同一个节点;其他见代码注释部分;
写作纯属个人兴趣,如有错误请批评指正!
package Java01;
import java.util.Arrays; public class HeapSort { //主函数入口 public static void main(String[] args){ int[] arr = new int[] {10,78,9,68,0,17,8,48,2,33}; heapSort(arr); System.out.println(Arrays.toString(arr)); } //多次调用maxHeap,取出第一个值,也就是最大值,放置最后 public static void heapSort(int[] arr){ //定义开始位置,最后一个非叶子节点 int start = (arr.length-1)/2; //调整为大顶锥 for(int i=start;i>=0;i--){ maxHeap(arr, arr.length, i ); } for(int i = arr.length-1;i>0;i--){ int temp = arr[0]; arr[0]=arr[i]; arr[i]=temp; maxHeap(arr,i,0); } } // 参数主要有 数组,数组长度,索引 public static void maxHeap(int[] arr,int size,int index){ //左子节点 int leftNode = 2*index + 1; //右子节点 int rightNode = 2*index + 2; //暂且默认该节点为最大值,与自己的左右节点进行比较 int max = index; if(size>leftNode&&arr[leftNode]>arr[max]){ max = leftNode; } if(size>rightNode&&arr[rightNode]>arr[max]){ max = rightNode; } //此处若发生交换,必定破坏了原有堆的结构,需要调整 if(max!=index) { int temp=arr[index]; arr[index]=arr[max]; arr[max]=temp; //调整,此时的max指向左节点或者右节点 maxHeap(arr,size,max); } } }
相关文章推荐
- 数据结构与算法之排序:堆排序、归并排序及快速排序
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 【数据结构与算法】【排序】堆排序的代码实现
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 【数据结构与算法】内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- 【练习】数据结构与算法练习题之高效排序
- 数据结构与算法之二分法插入排序
- 数据结构算法学习-1. 查找(Search)概论与三种顺序查找算法
- 【1】数据结构与算法-1 直接插入排序法
- C/C++数据结构通过顺序栈实现括号()匹配算法
- 数据结构与算法之--简单排序:冒泡、选择和插入
- 算法笔记五:利用堆结构来对数据进行排序
- 数据结构与算法-顺序查找
- 数据结构与算法——线性表的顺序表示
- Java-数据结构与算法-选择排序与冒泡排序
- Java数据结构与算法之选择排序_动力节点Java学院整理