堆排序

来源:互联网 发布:湖北十一选五遗漏数据 编辑:程序博客网 时间:2024/06/09 13:05

一 简介

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

二 备忘

#include <stdio.h>int n;int heap_len;void make_heap(int* A, int i){int min = i;int l = 2*i;int r = 2*i + 1;if (l <= heap_len && A[l] > A[min])min = l;if (r <= heap_len && A[r] > A[min])min = r;if (i != min){int tmp = A[min];A[min]= A[i];A[i] = tmp;make_heap(A, min);}}void heap_sort(int *A, int n){int i;for(i = n/2; i >= 1; --i)make_heap(A, i);int tmp;for (i = n; i > 1; --i){tmp = A[i];A[i]= A[1];A[1] = tmp;heap_len--;make_heap(A, 1);}}int main(){int a[11] = {0, 1,5,3,5,4,4,234,2,64,3};n = 10;heap_len = 10;heap_sort(a, 10);int i;for (i = 1; i <= n; ++i){printf("%d ", a[i]);}printf("\n");return 0;}

原创粉丝点击