堆排序

原创 2018年04月16日 23:37:11

堆具有完全二叉树的特点   分为大顶堆和小顶堆

a[5]={1,2,3,4,5};鄙视


                          小顶堆


#include<stdio.h>
void adjust(int a[] , int i ,int size )//调整数据使之为最大堆//
{
int max,t;
int l=2*i,r=2*i+1;
max=i;
if(i<=size/2)
{
if(l<=size&&a[l]>a[max])
   max=l;
if(r<=size&&a[r]>a[max])
   max=r;
if(max!=i)
{
t=a[i];
a[i]=a[max];
a[max]=t;
adjust(a,max,size);
}
}
}
void head(int *a,int size)    //建立堆 
{
    int i;
    for(i=size/2;i>=0;i--)    //非叶节点最大序号值为size/2 
    {
        adjust(a,i,size);    
    }    
}
void headsort(int a[] ,int size) //把不为大顶堆的树变为大顶堆//
{
int i,t;
head(a,size);
for(i=size;i>0;i--)
{
t=a[i];
a[i]=a[0];
a[0]=t;
   adjust(a,0,i-1) ;
}
}
int main() 
{
int a[10]={5,1,6,8,3,4,0,9,2,7} ;
headsort(a,9);
for(int i=0; i<10 ; i++)
{
printf("%d ",a[i]);
}
      return 0;
}

数据结构JAVA版2017教学视频课程

本课程共28个教学视频课程,22小时的教学时间,深入浅出的理论讲解,用JAVA语言实现每个知识点的代码,大量的上机练习题讲解,通过家家乐停车场,佳佳乐彩票机,佳佳乐通讯录,编译原理的语法分析等项目的综合应用实训,上课PPT,上课源代码等资料可以直接下载使用
  • 2017年03月31日 13:31

几种排序总结(上)——堆排序

堆排序 这几天看了算法导论的排序部分,作一下总结。 堆排序的优点        1)最坏情况下o(nlgn)的时间复杂度        2)就地排序,不用辅助数组 几种操作(以最大堆...
  • lawrencesgj
  • lawrencesgj
  • 2012-10-17 17:17:01
  • 3192

堆排序图片详解

堆排序实例 首先,建立初始的堆结构如图: 然后,交换堆顶的元素和最后一个元素,此时最后一个位置作为有序区(有序区显示为黄色),然后进行其他无序区的堆调整,重新得到大顶堆后,...
  • u011068702
  • u011068702
  • 2016-10-09 15:23:27
  • 1524

堆排序原理及其实现(C++)

堆排序原理及其实现(C++)1 堆排序的引入 我们知道`简单选择排序`的时间复杂度为O(n^2),熟悉各种排序算法的朋友都知道,这个时间复杂度是很大的,所以怎样减小简单选择排序的时间复杂度呢?从上...
  • yanglr2010
  • yanglr2010
  • 2016-10-18 21:48:02
  • 5681

java堆排序递归代码,无原理版,比较好理解

public class HeapOperate2 { /* * 建立堆时只需要保证根结点小于两个子结点或者大于两个子结点,对两个子结点大小没有要求 */ public static v...
  • zhuqiuhui
  • zhuqiuhui
  • 2016-04-21 23:29:27
  • 1449

堆排序以及其应用大总结

教材上很详细,网上内容也不少,但感觉不够直观、简练、丰富。下面按照自己方式总结下。 提纲: 1)算法描述 2)代码 3)“三围”以及证明(复杂度、效率、稳定性等分析) 4)算法直接应用 5...
  • zhq651
  • zhq651
  • 2012-08-29 01:52:19
  • 10363

优化的堆排序

优化的堆排序体现在不需要重新生成一个数组,而是直接原地进行所谓的堆排序。 首先,对于一个杂乱的数组,我们首先对所有的非叶子节点进行shiftdown操作,使得堆顶arr[0]的元素为最大值,如下图所...
  • qq_19782019
  • qq_19782019
  • 2017-11-06 13:42:05
  • 205

【数据结构与算法】内部排序之三:堆排序(含完整源码)

堆排序、快速排序、归并排序(下篇会写这两种排序算法)的平均时间复杂度都为O(n*logn)。要弄清楚堆排序,就要先了解下二叉堆这种数据结构。本文不打算完全讲述二叉堆的所有操作,而是着重讲述堆排序中要用...
  • mmc_maodun
  • mmc_maodun
  • 2014-03-04 00:01:45
  • 23595

java堆排序非递归代码,无原理版,比较好理解

public class HeapOperate { /* * 建立堆时只需要保证根结点小于两个子结点或者大于两个子结点,对两个子结点大小没有要求 */ public static vo...
  • zhuqiuhui
  • zhuqiuhui
  • 2016-04-21 23:01:59
  • 902

堆排序(基本思想以及算法实现)

1、引言 简单选择排序算法是通过比较,确定最终的位置。假设未排序的元素个数为N,则遍历一趟,需要比较N-1次,再遍历下一趟时,需比较N-2次。但是,第二次的比较是完全独立的,没有利用第一次比较的信息...
  • u012549515
  • u012549515
  • 2013-10-30 15:20:32
  • 1791
收藏助手
不良信息举报
您举报文章:堆排序
举报原因:
原因补充:

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