Chinaunix首页 | 论坛 | 博客
  • 博客访问: 894619
  • 博文数量: 73
  • 博客积分: 2689
  • 博客等级: 少校
  • 技术积分: 897
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-07 19:39
个人简介

一个有目标,为自己的未来努力奋斗的人

文章分类
文章存档

2015年(9)

2014年(2)

2013年(6)

2012年(11)

2011年(33)

2010年(12)

分类: C/C++

2011-04-10 02:30:55

这是基于堆排序算法的C源代码,对于那些正在找工作的dd、mm们是很有帮助的,特将其共享与此!


typedef int element;

struct node {
    element key;
};
typedef struct node ARRAY;



void swap(element *A, element *B) {

    element tmp = *A;

    *A = *B;
    *B = tmp;
}

/* The index of ARRAY is start from zero */
void pushdown(int first, int last, ARRAY *A) {

    int r = first<<1;

    while(r+1 <= last) {
        if ((r+1 == last) && last%2==1 && A[first].key > A[r+1].key) {
            swap(&A[first].key, &A[r+1].key);
            first <<= 1;
        } else if (r+2 <= last && A[first].key > A[r+2].key && A[r+1].key > A[r+2].key) {
            swap(&A[first].key, &A[r+2].key);
            first = (first<<1) + 2;
        } else if (r+2 <= last && A[first].key > A[r+1].key && A[r+1].key <= A[r+2].key) {
            swap(&A[first].key, &A[r+1].key);
            first = (first<<1) + 1;
        } else {
        /* in this case, we do nothing */
            r = last;
            continue;
        }
        r = first<<1;
    }
}

void heap_sort(ARRAY *A, int n) {

    int i = 0;

    /* init the heap */
    for (i=n/2;i>=0;i--) {
        pushdown(i, n-1, A);
    }
    
    for(i=1;i<n;i++) {
        swap(&A[0].key, &A[n-i].key);
        pushdown(0, n-i-1, A);
    }
}


完整的程序可以在这里下载:
文件:heap-sort.c.tar.gz
大小:1KB
下载:下载
阅读(780) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~