小根堆排序法

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

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

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

白话经典算法系列之七 堆与堆排序

堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特...

java堆排序算法(小根堆)

这几天学习堆排序算法,主要是引用老师的方法进行编写的,通过多线程和管道通信(即java的PipedInputStream和PipedOutputStream)来实现大量数据的排序 1、首先是将数据分...

[编程珠玑读书笔记]堆排序,小根堆

堆排序的关键是要实现siftup和siftdown。当建立完这两个函数以后,排序一个数组只需要5行代码。算法执行了n-1次siftup和siftdown,而每次操作的成本最多O(lgn),所以运行时间...
  • lalor
  • lalor
  • 2012-02-24 00:18
  • 3271

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

前言 在整理算法题的时候发现,大根堆(小根堆)这种数据结构在各类算法中应用比较广泛,典型的堆排序,以及利用大小根堆这种数据结构来找出一个解决问题的算法最优解。因此,我打算单独将关于堆的应用独立总结...

堆排序—大根堆,小根堆

1.小根堆 若根节点存在左子女则根节点的值小于左子女的值;若根节点存在右子女则根节点的值小于右子女的值。 2.大根堆 若根节点存在左子女则根节点的值大于左子女的值;若根节点存在右子女则根节点的值大于右...

大根堆-小根堆-堆排序-C实现

大根堆小根堆的实现:以PPT形式呈现大根堆构建的理论过程 1、首先涉及到一个堆的调整,这也是算法的核心部分。假设树中,节点i的子树已经为两个大根堆。这两个子树再加上i节点的话,可能是大根堆也可能不是...

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

http://blog.csdn.net/morewindows/article/details/6709644/

小根堆,大根堆,堆排序

小根堆,大根堆,堆排序 下面用c++模板实现小根堆,大根堆,堆排序功能, 可以适用不同类型的数据,可以直接使用 //file:heap.h #ifndef _AGILE_HEAP_H_ #def...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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