小根堆排序法

原创 2007年09月29日 11:44:00

在找工作的过程中,有一家公司面试,通过小根堆实现数组排序。当时,没有写出来,下来后自己研究了下。用JAVA实现了小根堆排序算法。与大家分享一下。

package src;
import java.util.Arrays;
public class HeapSort {
 
 public static void main(String[] args)
 {
  int[] arry_int={49,38,65,97,76,13,27,55};
  //int[] arry_int={13, 38, 27, 55, 76, 65, 49, 97};
  HeapSort hsort=new HeapSort();
  hsort.HeapSorting(arry_int);
  //System.out.println(Arrays.toString(arry_int));
 }
    //调整无序序列为大根堆 s 为数组的起始下标,m为终止下标
 public void HeapAdjust(int[] arr, int s,int m)
 {
  int temp=arr[s];
  for(int j=2*s+1;j<m;j=j*2+1)
  {
   if(j+1<m && arr[j]>arr[j+1]) ++j;
   if(temp<arr[j])break;
   arr[s]=arr[j];
   s=j;
   arr[s]=temp;
     
  }
 }
 //根据大根堆,对堆排序
 public void HeapSorting(int[] arr)
 {
        //把顺序表构建成为一个大根堆
  
  
  for(int i=(arr.length/2-1);i>=0;--i)
  {
   
   HeapAdjust(arr,i,arr.length);
  }
  
  for(int j=arr.length-1;j>0;--j)
  {
   System.out.println("堆顶元素 arrr[0]="+arr[0]);
   System.out.println("arr["+j+"]="+arr[j]);
   System.out.println("将当前锥顶元素与第"+j+"个元素互换");
   int temp=arr[0];
   arr[0]=arr[j];
   arr[j]=temp;
   
   HeapAdjust(arr,0,j);
   System.out.println(Arrays.toString(arr));
  }
  
  
 }
}
 

堆排序—大根堆,小根堆

1.小根堆 若根节点存在左子女则根节点的值小于左子女的值;若根节点存在右子女则根节点的值小于右子女的值。 2.大根堆 若根节点存在左子女则根节点的值大于左子女的值;若根节点存在右子女则根节点的值...
  • abcd1f2
  • abcd1f2
  • 2017年02月04日 15:27
  • 1168

【算法】堆排序大根堆和小根堆建堆以及元素输出

这样一组数 45 28 49 16 37 82 56 75初始堆后,利用堆排序怎么排,规律是什么? 高人能不能讲述一下初始堆和堆排序的区别是什么呀? 首先建立完全二叉树 45 28 49 1...
  • kisscatforever
  • kisscatforever
  • 2017年01月01日 21:47
  • 2526

堆排序——深入浅出(图解)

如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log i),所以插入所有元素的整体时间复杂度是O(Nlog...
  • as02446418
  • as02446418
  • 2015年08月16日 08:49
  • 1285

堆排序--小根堆的建立与调整

网上关于小根堆(堆排序)的博客不是很多,有些代码还不全,这里找到一个适合初学者的代码分享给大家: 原作者在他的博客里已经写的很详细了,因为VS对代码的要求比较高,我对原作者分配空间和增加空间的函数用了...
  • qidu1998
  • qidu1998
  • 2017年11月27日 21:22
  • 273

排序技术_各种算法原理 图解 代码实现

排序技术有很多种,下面简单介绍一下几种。 一  插入排序 1.1  直接插入排序 基本思想:每次将一个待排序额记录按其关键码的大小插入到一个已经排好序的有序序列中,直到全部记录排好序。 ...
  • ggxxkkll
  • ggxxkkll
  • 2013年03月13日 17:51
  • 25361

堆排序小根堆 大根堆 迭代 递归 总结 完整代码

http://blog.csdn.net/morewindows/article/details/6709644/
  • WangDong_CNDS
  • WangDong_CNDS
  • 2016年10月05日 15:30
  • 1498

最小堆和最小堆排序

1、原理介绍:百度百科 2、最小堆的构造和添加#include #define N 9 // 最小堆得元素个数int minHeap[N]; // 存放最小堆的数组 int index1 = 0;...
  • sddxqlrjxr
  • sddxqlrjxr
  • 2016年04月13日 14:28
  • 4295

小根堆对数组排序C语言算法实现

下面是我用C语言实现的小根堆排序算法实现,有注释。空间复杂度仅为o(1). 数组中0也存元素。 个人认为利用堆排序可以查找出数组中重复的2个元素,因为排好序后,数组中重复的2个元素一定是相邻的2个元...
  • happyAnger6
  • happyAnger6
  • 2012年02月19日 20:32
  • 3527

堆排序—大根堆,小根堆

1.小根堆 若根节点存在左子女则根节点的值小于左子女的值;若根节点存在右子女则根节点的值小于右子女的值。 2.大根堆 若根节点存在左子女则根节点的值大于左子女的值;若根节点存在右子女则根节点的值大于右...
  • xietingcandice
  • xietingcandice
  • 2015年02月02日 20:40
  • 1598

[大、小根堆应用总结一]堆排序的应用场景

前言 在整理算法题的时候发现,大根堆(小根堆)这种数据结构在各类算法中应用比较广泛,典型的堆排序,以及利用大小根堆这种数据结构来找出一个解决问题的算法最优解。因此,我打算单独将关于堆的应用独立总结...
  • shakespeare001
  • shakespeare001
  • 2016年05月10日 09:53
  • 5250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小根堆排序法
举报原因:
原因补充:

(最多只允许输入30个字)