博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆排序实例
阅读量:6091 次
发布时间:2019-06-20

本文共 1668 字,大约阅读时间需要 5 分钟。

通用函数:

/* common.h */#ifndef _COMMON_H#define _COMMON_Hvoid swap(int *ap, int *bp);void print_array(const int array[], int n);#endif
/* common.c */#include "common.h"#include 
void swap(int *ap, int *bp){ int tmp; tmp = *ap; *ap = *bp; *bp = tmp;}void print_array(const int array[], int n){ int i; for(i = 0; i < n; i++) printf("%d ", array[i]); printf("\n");}

堆排序函数:

/* max_heap_sort.h */#ifndef _MAX_HEAP_SORT_H#define _MAX_HEAP_SORT_Hvoid perc_down(int array[], int i, int n);void heap_sort(int array[], int n);#endif
/* max_heap_sort.c */#include "max_heap_sort.h"#include "common.h"#define left_child(i)    (2 * (i) + 1)void perc_down(int array[], int i, int n){    int child;    int tmp;        for(tmp = array[i]; left_child(i) < n; i = child)    {        child = left_child(i);        if(child != n-1 && array[child + 1] > array[child])            child++;        if(tmp < array[child])            array[i] = array[child];        else            break;    }            array[i] = tmp;}void heap_sort(int array[], int n){    int i;    for(i = n / 2; i >= 0; i--)    /* 建立堆 */        perc_down(array, i, n);    for(i = n-1; i > 0; i--)    {        swap(&array[0], &array[i]);    /* 删除最大元素,其实是将当前最大堆的最大元素放到堆的末尾 */        perc_down(array, 0, i);    }}

测试函数:

/* max_heap_sort_test.c */#include "max_heap_sort.h"#include 
int main(void){ int array[] = {
31, 24, 45, 67, 54, 87, 98, 12, 15, 89}; heap_sort(array, 10); print_array(array);}
Makefile:
/* Makefile */target := testobjs := max_heap_sort_test.o max_heap_sort.o common.o$(target):$(objs)    gcc -o $@ $^%.o:%.c    gcc -c -o $@ $

测试结果:

转载地址:http://kjlwa.baihongyu.com/

你可能感兴趣的文章
Red Hat Enterprise Linux 各个版本以及发布日期
查看>>
J2EE全面介绍
查看>>
深入浅出Cocoa多线程编程之 block 与 dispatch quene
查看>>
UIWebView
查看>>
并发集合(三)使用阻塞线程安全的列表
查看>>
【机房合作】状态模式与上机
查看>>
iOS中alloc与init
查看>>
Raw Sockets programming on Linux with C
查看>>
纸上谈兵: AVL树[转]
查看>>
SpriteBuilder中粒子发射器的reset on visibility toggle选项解释
查看>>
深入浅出jackrabbit之十三 查询之AST和QT
查看>>
动态规划算法计算网络的最长路线和最短路线
查看>>
eclipse中ant build 控制台乱码解决解决方法(ant执行java)
查看>>
搭建Maven私服(使用Nexus)
查看>>
采集数据库中未绑定变量的sql
查看>>
一个统计网站访问IP的实例
查看>>
19 年 3 月 GitHub 上最流行的 34 个 JS 仓库
查看>>
C++ 模板函数
查看>>
《图解HTTP》— HTTP报文信息
查看>>
如何优雅的封装vue组件
查看>>