堆排序 C语言版

    xiaoxiao2021-12-14  19

    #include <stdio.h> void HeapAdjust(int a[],int i,int size); void BuildHeap(int a[],int size); void HeapSort(int a[],int size); void Swap(int *p,int *q); int main(){     int i,n,a[100];     printf("堆排列:\n");     scanf("%d",&n);     for(i=1;i<=n;i++){        scanf("%d",&a[i]);     }     HeapSort(a,n);     printf("排序结果:\n");     for(i=1;i<=n;i++){        printf("%d ",a[i]);     }     printf("\n");     return 0; } void HeapAdjust(int a[],int i,int size){      int lchild=2*i,rchild=2*i+1;      int max=i;      if(i<=size/2){          if(lchild<=size&&a[lchild]>a[max]){            max=lchild;          }          if(rchild<=size&&a[rchild]>a[max]){            max=rchild;          }          if(max!=i){            Swap(&a[i],&a[max]);            HeapAdjust(a,max,size);          }      } } void BuildHeap(int a[],int size){      int i;      for(i=size/2;i>=1;i--){         HeapAdjust(a,i,size);      } } void HeapSort(int a[],int size){      int i;      BuildHeap(a,size);      for(i=size;i>=1;i--){         Swap(&a[1],&a[i]);         HeapAdjust(a,1,i-1);      } } void Swap(int *p,int *q){      int temp;      temp=*p;      *p=*q;      *q=temp; }
    转载请注明原文地址: https://ju.6miu.com/read-967993.html

    最新回复(0)