基本算法之堆排序
来源:互联网 发布:淘宝品牌调性分怎么查 编辑:程序博客网 时间:2024/05/17 00:17
堆排序
1、堆排序
什么是堆?堆是一种完全二叉树,并且满足每个结点的值都不小于或者不大于其左右结点的值。再简单的说就是利用大顶推或者小顶堆进行排序。堆排序基本思路:将待排序的序列构造成一个大顶堆,这时整个序列最大值就是根节点,将根节点与堆得末尾结点进行交换后,剩下的结点重新构成一个大顶堆,此时,次大值就是根节点,重复进行上面步骤,就可以得到一个有序序列。
2、代码实现public static void heapSort(){int[] sort = { 68, 24, 91, 88, 6, 7, 5, 33, 10 }; int i;for(i = sort.length/2-1; i >= 0; i--){buildHeap(sort,i,sort.length);//调整为大顶堆}for (i = sort.length-1; i > 0; i--) {swap(sort,0,i);//交换buildHeap(sort,0,i);//重新构建大顶堆}for (int j = 0; j < sort.length; j++) {System.out.println(sort[j]);}}public static void buildHeap(int[] sort,int i,int n){int temp ,child = 0;for(temp = sort[i];(2*i+1) < n;i = child){child = 2*i+1;//左孩子索引if(child != n-1 && sort[child] < sort[child + 1])child++;if(temp < sort[child])sort[i] = sort[child];elsebreak;}sort[i] = temp;}public static void swap(int[] list,int i,int j){int temp = list[i];list[i] = list[j];list[j] = temp;}
开始,将他与其孩子结点进行比较和互换,构建堆得时间复杂度为 O(n) ,重建堆得时间复杂度为O(nlogn),所以平均时间
复杂度为O(nlogn)。堆排序性能远远高于简单排序、冒泡排序、直接插入排序时间复杂度的O(n²)。堆排序是一种不稳定
的排序。
阅读全文
0 0
- 基本算法之堆排序
- 堆排序-基本算法
- 基本排序算法--堆排序
- 【Python排序搜索基本算法】之堆排序
- 基本排序之堆排序
- 算法之堆排序
- 算法之堆排序
- 算法之堆排序
- 算法之堆排序
- 算法之堆排序
- 算法之堆排序
- 算法之堆排序
- 算法之堆排序
- 【算法】之堆排序
- 排序算法之堆排序
- 排序算法之堆排序
- 排序算法之 堆排序
- 排序算法之堆排序
- Ensemble Learning-模型融合-Python实现
- 同源策略和跨域访问
- JavaScript将input file的选择的文件清空的两种解决方案
- All sentinels down, cannot determine where is mymaster master is running
- spring源码附录(1)java实现对XML格式的验证
- 基本算法之堆排序
- hdu_round3-1003.bx回文(manacher+dp)
- git常用命令
- jstl fmt标签笔记
- 华为机试——明明的随机数
- Linux常用命令清单
- 用多线程进行的序列快速排序
- 51 nod 1212 基础MST
- Service的两种启动方式