小根堆排序法

原创 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.1  直接插入排序 基本思想:每次将一个待排序额记录按其关键码的大小插入到一个已经排好序的有序序列中,直到全部记录排好序。 ...
  • ggxxkkll
  • ggxxkkll
  • 2013年03月13日 17:51
  • 24182

Java排序算法(三):堆排序

堆积排序(Heapsort)是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。堆排序是不稳定的排序方法,辅助空间为O(1), 最坏时间复杂度为O(nlog...
  • apei830
  • apei830
  • 2011年07月04日 23:56
  • 34993

堆排序—大根堆,小根堆

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

C++ heap 大根堆 小根堆

Python实现八大排序算法(转载)+ 桶排序(原创)

插入排序 核心思想 代码实现 希尔排序 核心思想 代码实现 冒泡排序 核心思想 代码实现 快速排序 核心思想 代码实现 直接选择排序 核心思想 代码实现 堆排序 核心思想 代码实现 归并排序 核心思想...

【堆】 大根堆和小根堆的建立

堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值。 (1)根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆。  (1...

noip2004 合并果子 (贪心+小根堆)

P1097合并果子 Accepted 标签:贪心NOIP提高组2004 描述 在一个果园里,多多已经将所有的果子打了下来,而...

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

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

POJ1442 大根堆和小根堆找第k大的数

题意: 给定M个数,每次可以插入序列一个数;再给N个数,表示在插入第几个数后输出一个数,第一次输出序列中最小的,第二次输出序列中第二小的……以此类推,直到输出N个数。 第一次做只用一个优先数列超时...

小根堆 总结

小根堆 如果有一个关键字的集合K={k0,k1,k2, ..., kn-1}, 把所有元素按完全二叉树的顺序存储 方式存放在一个一维数组中,并且满足 ki 则称这个集合为小根堆。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小根堆排序法
举报原因:
原因补充:

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