内部排序-堆排序
来源:互联网 发布:c语言经典编程题pdf 编辑:程序博客网 时间:2024/04/28 10:51
堆排序方法主要是循环的将要排序的数据构造成堆,然后将堆顶输出
循环利用上述方法,将剩下的数据继续构造成堆。
该方法的时间复杂度为nlogn. 空间复杂度为O(1);
#include <stdio.h>void dump_heap(int *list, int len){int i = 0;for (i = 1; i <= len; i++)printf("%d ", list[i]);printf("\n");}void create_heap(int *heap, int root, int len){int i, j;int temp;int finish = 0;j = 2*root;temp = heap[root];while( j <= len && finish ==0) {/*找最大子节点*/if(j < len){if (heap[j] < heap[j + 1])j++;}if(temp >= heap[j]){finish = 1;}else{heap[j/2] = heap[j];j = 2*j;}heap[j/2] = temp;}}void heap_sort(int *heap, int len){int i, j, temp;/*二叉树转成heap*/for (i = len/2; i > 0; i--){create_heap(heap, i, len);dump_heap(heap, len);}/*开始排序*/for (i = len - 1; i > 0; i--){temp = heap[i+1];heap[i+1] = heap[1];heap[1] = temp;create_heap(heap, 1, i);printf("cur state: ");dump_heap(heap, len);}}int main(int argc, char* argv[]){ //第一个数据为空位置,不存储数据,主要是为了方便构造树。int list[] = {0, 1,3,89,3,5,67,25,88,55,43,7,9,10};heap_sort(list, sizeof(list)/sizeof(list[0]) - 1);return 0;}
修改为下面的程序,更好一点
#include <stdio.h>void dump_heap(int *list, int len){int i = 0;for (i = 1; i <= len; i++)printf("%d ", list[i]);printf("\n");}void create_heap(int *heap, int root, int len){int j;int temp;temp = heap[root];for (j = 2*root; j <= len; j *= 2){/*找最大子节点*/if(j < len && heap[j] < heap[j+1])j++;if(temp >= heap[j])break;else{heap[root] = heap[j];root = j;heap[j] = temp;}}}void heap_sort(int *heap, int len){int i, j, temp;/*二叉树转成heap*/for (i = len/2; i > 0; i--){create_heap(heap, i, len);dump_heap(heap, len);}/*开始排序*/for (i = len - 1; i > 0; i--){temp = heap[i+1];heap[i+1] = heap[1];heap[1] = temp;create_heap(heap, 1, i);printf("cur state: ");dump_heap(heap, len);}}int main(int argc, char* argv[]){int list[] = {0, 1,3,89,3,5,67,25,88,55,43,7,9,10};heap_sort(list, sizeof(list)/sizeof(list[0]) - 1);return 0;}
0 0
- 内部排序--堆排序
- 内部排序-堆排序
- 内部排序之堆排序
- 内部排序之堆排序
- 内部排序之堆排序
- 内部选择排序---堆排序
- 八大内部排序 -- 堆排序
- 内部排序算法:堆排序
- 内部排序—堆排序
- 内部排序之 堆排序
- 内部排序---快速排序、堆排序
- 堆排序( 内部排序 续 )
- 内部排序(五)堆排序算法
- 内部排序算法之堆排序
- 内部排序之三:堆排序
- 内部排序之三:堆排序
- 内部排序之三:堆排序
- 内部排序——堆排序初探
- Java--常用jar包用途
- 进制转换
- scala中的var,val,immutable,mutable理解小结
- Spark入门学习
- 解决CFile 写入中文后换行
- 内部排序-堆排序
- LeetCode 213:House Robber II
- 提问的智慧
- Java NIO使用及原理分析 (一)
- Linux 递归经典:fork 炸弹
- 多线程的创建
- 黑马程序员--C语言自学笔记---04分支结构
- 数组和指针
- 进击的KFC:UI(14)集合视图UICollectionView