| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 649 人关注过本帖
标题:简单的对随机数组的堆排序,我程序写好了,可是结果不对,求大神给看看。
只看楼主 加入收藏
别咬我
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-11-1
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
简单的对随机数组的堆排序,我程序写好了,可是结果不对,求大神给看看。
#include <iostream>
#include<algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;

void HeapAdjust(int *a,int i,int size)  //调整堆
{
    int lchild=2*i;       //i的左孩子节点序号
    int rchild=2*i+1;     //i的右孩子节点序号
    int max=i;            //临时变量
    if(i<=size/2)          //如果i不是叶节点就不用进行调整
    {
        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);    //避免调整之后以max为父节点的子树不是堆
        }
    }        
}

void BuildHeap(int *a,int size)    //建立堆
{
    int i;
    for(i=size/2;i>=1;i--)    //非叶节点最大序号值为size/2
    {
        HeapAdjust(a,i,size);   
    }   
}

void HeapSort(int *a,int size)    //堆排序
{
    int i;
    BuildHeap(a,size);
    for(i=size;i>=1;i--)
    {
        //cout<<a[1]<<" ";
        swap(a[1],a[i]);           //交换堆顶和最后一个元素,即每次将剩余元素中的最大者放到最后面
          //BuildHeap(a,i-1);        //将余下元素重新建立为大顶堆
          HeapAdjust(a,1,i-1);      //重新调整堆顶节点成为大顶堆
    }
}

int  main()                                                 //主函数
{   
    int n;
    int *a;
    printf("请输入你要排序的数组大小");
    scanf("%d",&n);
    a=new int[n];
    int i;
    for(i=0;i<n;i++)
       a[i]=rand();
    printf ("排序前的前十个元素 \n");
    for(i=0;i<20;i++)
     {         
        printf("%d\t",a[i]);
     }
     clock_t t1,t2;
     t1= clock();
     HeapSort(a,n);
     t2 = clock();
     clock_t t = t2 - t1;
       printf("排序后的前十个元素为\n");
     for(i=0;i<20;i++)
     {
         printf("%d\t",a[i]);
     }
     printf("排序所需时间\n");
     printf("%d\n",t);
     printf("\n");
     return 0;
}
    前面几个函数定义是网上摘抄来的,若是原作者看到还请多包涵我是小白,不太会。主函数是自己写的,网上摘抄来的也有主函数运行也很完美,不过我需要对随机数组进行排序所以得改掉主函数,可是改完结果就出问题了,下面是结果截图。
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: include 
2016-11-01 21:22
别咬我
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-11-1
收藏
得分:0 
求大神解惑,不胜感激
2016-11-01 21:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
std::sort_heap
2016-11-01 21:43
快速回复:简单的对随机数组的堆排序,我程序写好了,可是结果不对,求大神给看看 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027225 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved