小弟关于数据结构的问题,还请各位高手指点一二!!!

zhanggc1001 2004-12-28 07:57:34
void sift_course( sqlist &l,int i,int n )
{
int j,t;
j=2*i;
t=l.array[i];
while( j<=n )
{
if( j<n&&l.array[j]<l.array[j+1] )
j++;
if( t<l.array[j] )
{
l.array[i]=l.array[j];
i=j;
j=2*i;
}
else
break;
}
l.array[i]=t;
}

void heap_sort( sqlist &l )
{
int i,t;
for( i=(int)l.length/2;i>=1;i-- )
sift_course(l,i,l.length);
for( i=l.length;i>=2;i-- )
{
t=l.array[1];
l.array[1]=l.array[i];
l.array[i]=t;
sift_course(l,1,i-1);
}
}
这是我做的堆排序,但结果总是有一个数不能显示出来。
请各位高手指点小弟一二!!!!
...全文
67 点赞 收藏 4
写回复
4 条回复
goodluckyxl 2004年12月29日
你把模板里的T 改成你的int型

把所有template那些字样去掉
剩下就是你要的了

回复 点赞
zhanggc1001 2004年12月29日
对不起,你是用类模板写的
我的c++还没有到那个地步
有没有用c写的啊
谢谢各位高手了
顺便指出我编的程序的错误到底在那里!!!
回复 点赞
goodluckyxl 2004年12月29日
请楼主注意以后不要发两个相同的问题
另外一个帖子没有解答
我已经帮你转移到非技术区
回复 点赞
yuanye2008 2004年12月29日
*****************************堆排序*****************************
*开发环境:dev-c++ 4.9.8.0 + windows 2000 server
*功能介绍:采用数据结构书中P281--10.20(a)中的数组,
通过"堆排序"实现从小到大排序
*函数介绍:
1、HeapSort(T a[], int n )
参数: 构建堆,并进行堆排序
a[] ----- 存放排序的数值的整形数组
n ---- 数组的大小
2、HeapAdjust(T a[], int s, int m)
功能:在构建堆时,对数据进行筛选
参数:
a[] ----- 存放排序的数值的整形数组
s ----- 需要调整数值的下标
m ----- 数组的大小
3、 void DisplayMatrix(int a[]);
功能: 显示排序过程中和排序后的数组
参数:
a[] ----- 存放排序的数值的整形数组
*备注:
如果需要按回车显示一趟排序的结果,则将 HeapAdjust中的
getchar()的注销去掉
****************************************************************/
#include <iostream>
#include <cassert>
#include <stdlib.h>
#include <time.h>

using namespace std;
template<class T>
void HeapSort(T a[], int n );

template<class T>
void HeapAdjust(T a[], int s, int m);

void DisplayMatrix(int a[]);
const int N = 8;
int main(int argc, char *argv[])
{
int value;
int a[N] = {49,38,65,97,76,13,27,49};
cout << "没有排序的数组:" << endl;
DisplayMatrix(a);
cout << "开始对数组进行排序:" << endl;
HeapSort(a,N);
DisplayMatrix(a);
system("PAUSE");
return 0;
}

template<class T>
void HeapAdjust(T a[], int s, int m)
{
int j;
T temp;

temp=a[s];

//沿值最大的结点向下查找
for(j=2*s+1; j <= m ; j=j*2+1)
{
if(j < m && a[j] < a[j+1] )
{
++j;
}
if( !(temp < a[j]) )
break;
a[s]=a[j];
s=j;
}
a[s]=temp;
DisplayMatrix(a);
//getchar();
};

//将数组a中元素进行堆排序
template<class T>
void HeapSort(T a[], int n )
{
int i;
// T temp;
//调整为小顶堆
for(i=n/2-1; i>=0; --i)
{
HeapAdjust (a, i, n-1);
}
for( i=n-1; i>0; --i )
{
swap(a[0], a[i]);
HeapAdjust (a, 0, i-1);
}
};

void DisplayMatrix(int a[])
{
for (int i=0; i<8; i++)
{
cout << a[i] << ((i+1)%8?'\t':'\n');
}
}

//记得给分!

回复 点赞
发动态
发帖子
新手乐园
创建于2007-09-28

1.4w+

社区成员

4.1w+

社区内容

C/C++ 新手乐园
社区公告
暂无公告