zoukankan      html  css  js  c++  java
  • 堆排序

     1 // 堆排序.cpp : 定义控制台应用程序的入口点。
     2 
     3 #include "stdafx.h"
     4 #include <string.h>
     5 #define MAX 100
     6 
     7 void swap(int &a,int &b)
     8 {
     9     int c;
    10     c=a;
    11     a=b;
    12     b=c;
    13 }
    14 
    15 void max_heapity(int heap[],int i,int len)//保持最大堆性质
    16 {
    17     int left=2*i, right=2*i+1,largest=-1;
    18     if((left<=len)&&(heap[left]>heap[i]))
    19         largest=left;
    20     else 
    21         largest=i;
    22     if((right<=len)&&(heap[right]>heap[largest]))
    23         largest=right;
    24     if(largest!=i)
    25         {
    26             swap(heap[largest],heap[i]);
    27             max_heapity(heap,largest,len);
    28         }
    29 }
    30 
    31 void build_maxheap(int heap[],int len) //建立最大堆
    32 {
    33     int index=len/2;
    34     for(int i=index;i>=1;i--)
    35          max_heapity(heap,i,len);
    36 }
    37 
    38 void heap_sort(int heap[],int len)//堆排序
    39 {
    40     build_maxheap(heap,len);
    41     for(int i=len;i>=2;i--)
    42     {
    43         swap(heap[1],heap[i]);//每次将最大值放在最后一个结点中
    44         len-=1;
    45         max_heapity(heap,1,len);
    46     }
    47 }
    48 
    49 void main()
    50 {
    51     int a[MAX],lengh;
    52     printf("input a number:\n");
    53     scanf("%d",&lengh);
    54     printf("input %d number:\n",lengh);
    55     for(int j=1;j<=lengh;j++) //注意i值要从1开始
    56     {
    57         scanf("%d",&a[j]);
    58     }
    59     heap_sort(a,lengh);
    60     for(int i=1;i<=lengh;i++) //最终结果按从小到大排序输出
    61         printf("%4d",a[i]);
    62     printf("\n");
    63 }
  • 相关阅读:
    基础抽象代数
    斜堆
    WC2018
    WC2019
    有向图上不相交路径计数
    生成树计数
    Pr&#252;fer序列
    反演
    1.1 Linux中的进程 --fork、孤儿进程、僵尸进程、文件共享分析
    Python程序的执行过程 解释型语言和编译型语言
  • 原文地址:https://www.cnblogs.com/xingele0917/p/2718716.html
Copyright © 2011-2022 走看看