堆排序。
此处所说的堆和内存存储中的堆是两码事。
大顶堆,是一棵完全二叉树,树根的关键字最大,其子树也是符合大顶堆的概念,存储上可以用数组实现。
堆的一个很明显的用途是找表中的最大关键字非常快,取树根即可。
1、堆排序的第一个步骤是:建堆
把无序表调整为一个大顶堆:
文件buildheap.c
2、其次是对大顶堆取树根,即删除树根,然后再对堆进行调整,使其符合大顶堆结构。删除堆顶元素
文件delheap.c
3、对堆进行排序。堆排序
文件heapsort.c
文件heapsort.h
文件main.c
结果示例:
[lanux@localhost--Debug--16:30]$./heapsort
array number fallow as:
597 28 530 832 822 433 127 93 35 466
402 255 557 753 555 624 875 367 435 412
33 692 365 827 333 837 618 626 760 316
218 949 334 738 383 748 171 500 434 196
559 826 43 116 181 588 730 56 547 757
459 570 51 416 990 967 845 608 593 605
516 403 157 443 734 530 783 895 623 217
684 182 635 319 880 806 500 212 853 47
959 904 210 602 912 200 569 757 400 163
955 907 556 704 942 882 826 725 778 51
The heap sort follow:
28 33 35 43 47 51 51 56 93 116
127 157 163 171 181 182 196 200 210 212
217 218 255 316 319 333 334 365 367 383
400 402 403 412 416 433 434 435 443 459
466 500 500 516 530 530 547 555 556 557
559 569 570 588 593 597 602 605 608 618
623 624 626 635 684 692 704 725 730 734
738 748 753 757 757 760 778 783 806 822
826 826 827 832 837 845 853 875 880 882
895 904 907 912 942 949 955 959 967 990
[lanux@localhost--Debug--16:31]$
2010-12-03 17:19:13