首页 > 编程语言 > 详细

堆和堆排序

时间:2014-10-23 22:24:52      阅读:422      评论:0      收藏:0      [点我收藏+]

 

一,优先级队列

    数据集合中,各元素的访问顺序取决于元素自身的优先级(call-by-priority),

二,拥有的操作接口

1.插入操作

2.获取优先级最高的元素

3.删除优先级最高的元素

 

三,最基本的堆操作

1.下虑

void percolateDown(int heap[],int start,int end)
{

    int temp = heap[start];
 
    for (int j = 2 * start + 1 ; j < end ; j = 2 * j + 1) {
        
        while (j<end-1 && heap[j] <heap[j+1]) {
            j++;
        }
        
        if(temp >=heap[j])
            break;
        
        heap[start] = heap[j];
        start = j;
        
    }
    heap[start] = temp;
    
  
}

 

2.上虑

void percolateUp(int heap[],int start)
{
    int temp=0;
    int j = 0;
   
    
    while (start>0) {
    
         temp = heap[start];
         j = (start - 1)/2;
        
        if (heap[start]>heap[j]) {
            heap[start]=heap[j];
            heap[j]=temp;
            start=j;
    
        }else{
            break;
        }
        
    }

}

3.删除堆顶元素

 

int delete(int heap[],int *length)
{
    if (heap == NULL) {
        return 0;
    }
    
    heap[0] = heap[*length-1];
    (*length)--;
    percolateDown(heap, 0, *length);
    return 1;
    
}

 

4.在堆顶插入元素

int insert(int heap[],int value,int * length)
{
    if (heap == NULL) {
        return 0;
    }
    
    heap[*length] = value;
   
    percolateUp(heap, *length);
    (*length)++;
    return 1;


}

 

5.创建一个堆

 

int createHeap(int heap[],int length)
{
    if (heap == NULL || length == 0) {
        return 0;
    }
  
    for (int i = length / 2 -1; i>=0; i--) {
        percolateDown(heap, i, length);
    }
    
    return 1;

}

 

堆和堆排序

原文:http://www.cnblogs.com/ufreedom/p/4046950.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!