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

     1 /*
     2 请设计筛选函数void sift(int a[],int k,int n),对a[k] 进行筛选,
     3 并利用其设计堆排序算法函数void heapSort(int a[],int n),
     4 对a[1]..a[n]进行升序排序。并测试在不同数据规模下的排序效率。(详见lab10_05.c)
     5 */
     6 #include "Arrayio.h"
     7 #define N 10000     /*N为数据量大小,因data1.txt中只有50万个数,所以自行设定N值时需让N<=500000*/
     8 
     9 /*请将本函数补充完整,并进行测试*/
    10 void sift(int a[],int k,int n)
    11 {
    12       int i,j,finished;
    13       i=k;j=2*i;
    14       a[0]=a[k];
    15       finished=0;
    16       while((j<=n)&&(!finished))
    17       {
    18         if((j<n)&&(a[j+1]>a[j]))         //判断左右子树谁的值更大
    19              j++;
    20         if(a[0]>=a[j])
    21              finished=1;
    22         else
    23         {
    24           a[i]=a[j];
    25           i=j;j=2*j;
    26         }
    27       }
    28       a[i]=a[0];
    29     }
    30 
    31 void heapSort(int a[],int n)
    32 {
    33     int i;
    34     for (i=n/2;i>=1;i--)
    35         sift(a,i,n);
    36     for (i=n;i>1;i--)                   //当输出根结点后,重新调整剩余的关键字序列为一个新的大顶堆
    37         {
    38             a[0]=a[i];
    39             a[i]=a[1];
    40             a[1]=a[0];
    41             sift(a,1,i-1);
    42         }
    43 }
    44 
    45 int  main()
    46 {
    47   int a[N+1],n,i;                     /*数据存储在a[1]...a[N]中*/
    48   printf("数据初始化...
    ");
    49   n=readData(a,N,"data1.txt");      /*从data1.txt中读入N个整数存入数组a,n为实际读入的数据个数*/
    50   printf("%d个数据排序中...
    ",n);
    51   heapSort(a,n);
    52   saveData(a,n,"out.txt");          /*排序结果存放在out.txt文件中*/
    53   printf("排序结束,排序结果保存在out.txt文件中。
    ");
    54   return 0;
    55 }
     1 #include <stdio.h>
     2 #define MAX 500000
     3 
     4 /*从文件中读入数据存入数组a*/
     5 int readData(int a[], int n,char *f)  /*函数返回成功读入的数据个数*/
     6 {
     7     FILE *fp;
     8     int i;
     9     fp=fopen(f,"r");
    10     if (fp==NULL)   return 0;
    11     else
    12     {
    13         for (i=1;i<=n && !feof(fp);i++)
    14             fscanf(fp,"%d",&a[i]);
    15         fclose(fp);
    16         return i-1;
    17     }
    18 }
    19 
    20 /*存盘函数*/
    21 void saveData(int a[],int n, char *f)
    22 {
    23     FILE *fp;
    24     int i;
    25     fp=fopen(f,"w");
    26     if (fp==NULL)   printf("文件建立失败!");
    27     else
    28     {
    29         for (i=1;i<=n;i++)
    30             {
    31                 fprintf(fp,"%7d",a[i]);
    32                 if (i%10==0) fprintf(fp,"%c",'
    ');
    33             }
    34         fclose(fp);
    35     }
    36 }
    37 
    38 /*输出长度为n的整型数组*/
    39 void output(int a[],int n)
    40 {  int i;
    41    printf("
    数组的内容是:
    ");
    42    for (i=1;i<=n;i++)
    43      {
    44        printf("%7d",a[i]);
    45        if (i%10==0) printf("
    ");
    46      }
    47   printf("
    ");
    48 }
  • 相关阅读:
    Redhat 8 nfs网络共享
    Cisco ASA NAT (1) 静态配置和端口映射
    DISM命令行工具修复Windows 10映像
    開啟windows 7 ,10 的熱點功能(無線熱點)
    symantec SMG 抓包
    在 MacBook 上安装 Ubuntu
    springboot整合的MongoDB(一){博主新人入坑,不对的地方还望大哥指出}
    feign接口无法传递参数 (初学者)
    low cache rba恢复到on disk rba
    控制文件被删除的测试
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6214400.html
Copyright © 2011-2022 走看看