堆排序

来源:互联网 发布:js模块化用什么 编辑:程序博客网 时间:2024/04/29 01:39
 
//堆排序算法#include<stdio.h>int a[101];         //假设待排序数少于100void heap(int a[],int n);  //将无序数组置大顶堆void max_heap(int a[],int n,int i); // 调大顶堆void heapsort(int a[],int n);   //堆排序       void main(){int i,count=1;printf("输入待排序数:\n");scanf("%d",&a[count++]);while(a[count-1]!=-1)scanf("%d",&a[count++]);count-=2;heap(a,count);heapsort(a,count);for(i=1;i<=count;i++)printf("%3d",a[i]);printf("\n");}void max_heap(int a[],int n,int i)       //假设除了根节点,左右子数均为大顶堆{int large=2*i;if(large<=n&&a[large]<a[large+1])large++;if(large<=n&&a[i]>a[large])large=i;if(large!=i&&large<=n)     //必须加large<=n,不然递归无出路{int temp;temp=a[large];a[large]=a[i];a[i]=temp;max_heap(a,n,large);     }}void heap(int a[],int n)        {int i;for(i=n/2;i>0;i--)max_heap(a,n,i);       }void heapsort(int a[],int n){int i,temp;for(i=n;i>1;i--){temp=a[1];a[1]=a[i];a[i]=temp;max_heap(a,i-1,1);}}

原创粉丝点击