Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3349506
  • 博文数量: 1450
  • 博客积分: 11163
  • 博客等级: 上将
  • 技术积分: 11101
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-25 14:40
文章分类

全部博文(1450)

文章存档

2017年(5)

2014年(2)

2013年(3)

2012年(35)

2011年(39)

2010年(88)

2009年(395)

2008年(382)

2007年(241)

2006年(246)

2005年(14)

分类: C/C++

2006-04-26 15:37:54

堆排序法是选择排序法的一种。它的基本思想是,将无序区建成一个大头堆或小头堆。然后交换最顶端元素与最尾端元素,然后通过下虑将交换后的无序区重新修改成可用堆。依次类推,直到将所有元素排序完毕

算法

void percdown(int arr[], int i, int N)
{
    int tmp;
    int child;
    for(tmp = arr[i];  (2*i+1) < N; i=child)
    {
        child = 2 * i + 1;
        if (child != N -1 && arr[child + 1] > arr[child])
            child++;

        if(tmp < arr[child])
            arr[i] = arr[child];
        else
            break;
    }
    arr[i] = tmp;
}

void buildheap(int arr[], int N)
{
    int i;
    for(i = N / 2; i >=0; i++)
        percdown(arr[], i, N);
}

void heapsort(int arr[], int N)
{
    int i;
    buildheap(arr[], N);
    for(i=N - 1; i>0; i--)
    {
        arr[0] = arr[0] ^ arr[i];
        arr[i] = arr[0] ^ arr[i];
        arr[0] = arr[0] ^ arr[i];
   
        percdown(arr[], 0, N);
    }
   
}
阅读(1515) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~