Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26808
  • 博文数量: 41
  • 博客积分: 185
  • 博客等级: 入伍新兵
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-20 13:48
文章分类

全部博文(41)

文章存档

2013年(20)

2012年(21)

我的朋友
最近访客

分类:

2013-01-04 13:59:01

这是基于堆排序算法的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
下载:下载
阅读(121) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~