zoukankan      html  css  js  c++  java
  • 堆排序的实现

    堆排序的实现

    在顺序结构上完成,先建堆然后重建堆,最后实现全部排序

    (个人作法,仅供参考)

    #include<stdio.h>

    #include<stdlib.h>

    #define max 100000

    void HeapAdjust(int heap[],int k,int m)

    {

        int i,j,finished;

        int temp;

        temp=heap[k];

        i=k;

        j=2*i;

        finished=false;

        while(j<=m&&!finished)

        {

            if(j<m&&heap[j]>heap[j+1])j=j+1;//筛选

            if(temp<=heap[j])finished=true;

            else

             {

                heap[i]=heap[j];

                i=j;

                j=2*i;

              }

         }

        heap[i]=temp;

    }

    void HeapAdjust2(int heap[],int k,int m)

    {

        int i,j,finished;

        int temp;

        temp=heap[k];

        i=k;

        j=2*i;

        finished=false;

        while(j<=m&&!finished)

        {

            if(j<m&&heap[j]<heap[j+1])j=j+1;//筛选

            if(temp>=heap[j])finished=true;

            else

             {

                heap[i]=heap[j];

                i=j;

                j=2*i;

              }

         }

        heap[i]=temp;

    }

    void CreateHeap(int heap[],int length)

    {

        int i,n=length;

        for(i=n/2;i>=1;--i)

            HeapAdjust(heap,i,n);

    }

    void CreateHeap2(int heap[],int length)

    {

        int i,n=length;

        for(i=n/2;i>=1;--i)

            HeapAdjust2(heap,i,n);

    }

    void HeapSort(int heap[],int length)//对heap[1...n]进行堆排序

    {

        int temp,i,n;

        CreateHeap(heap,length);

        n=length;

        for(i=n;i>=2;--i)

        {

            temp=heap[1];//将堆顶记录和堆中的最后一个记录互换

            heap[1]=heap[i];

            heap[i]=temp;

            HeapAdjust(heap,1,i-1);//进行调整,使heap[1...i-1]变成堆

        }

    }

    void HeapSort2(int heap[],int length)//对heap[1...n]进行堆排序

    {

        int temp,i,n;

        CreateHeap2(heap,length);

        n=length;

        for(i=n;i>=2;--i)

        {

            temp=heap[1];//将堆顶记录和堆中的最后一个记录互换

            heap[1]=heap[i];

            heap[i]=temp;

            HeapAdjust2(heap,1,i-1);//进行调整,使heap[1...i-1]变成堆

        }

    }

    void PrintfHeap(int heap[],int length)

    {

        int i;

        for(i=1;i<=length;i++)

        printf("%d ",heap[i]);

        printf(" ");

    }

    int main()

    {system("color cf");  

      int heap[max];

      int n,i,choice;

      printf("        堆排序功能选项 ");

      printf("  1.输入一个新序列并进行堆排序 ");

      printf("  2.输出当前序列大顶堆排序 ");

      printf("  3.输出当前序列小顶堆排序 ");

      printf("  4.退出堆排序 ");

    loop1: printf("请选择你的操作:");

           scanf("%d",&choice);

    switch(choice)

       {

    loop2: case 1:

             printf("请输入序列的个数:");

             scanf("%d",&n);

             printf("请依次输入将要进行堆排序的元素: ");

           for(i=1;i<=n;i++)

               scanf("%d",&heap[i]);

               heap[0]=n;

               goto loop1;

    loop3: case 2: 

               HeapSort(heap,n);

               printf("从大到小排序: ");

               PrintfHeap(heap,heap[0]);

               goto loop1; 

    loop4: case 3:   

               HeapSort2(heap,n);

               printf("从小到大排序: ");

               PrintfHeap(heap,heap[0]);

               goto loop1;       

           case 4: printf("欢迎再来 "); break;

           default:

                exit(0);

        }

    return 0;

    }

    }

       

                     

    2.功能界面

     

                           

     

  • 相关阅读:
    RHEL7基本命令
    RHEL7VIM编辑器
    hello world
    配置mysql允许远程连接
    c#利用HttpWebRequest获取网页源代码
    C++局部变量详解(笔试题)
    c语言文件常用的操作
    Cocos2dx v3.1 初识(一)
    创建钩子(Hook)
    Extjs4.2.0 Form 的使用
  • 原文地址:https://www.cnblogs.com/wc1903036673/p/3427944.html
Copyright © 2011-2022 走看看