C 习题和解析(友元-02)

2008-02-23 05:34:29来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

05.设计一个类Sample,他有两个私有成员A[]和n(A中元素个数),将对A[]中数据进行各种排序的函数放入到一个友元类process中。
解:
process类不包含任何数据成员,包含的公共成员函数如下:
getdata(Sample &s); 用于获取对象s的数据
insertsort(Sample &s); 用于进行插入排序
shellsort(Sample &s); 用于进行希尔排序
bubblesort(Sample &s); 用于进行冒泡排序
quicksort(Sample &s); 用于进行快速排序
selectsort(Sample &s); 用于进行选择排序
disp(Sample &s); 用于输出数据

本题程式如下:
#include<iostream.h>
#define Max 100
class Sample
{
int A[Max];
int n;
friend class process;
public:
Sample(){n=0;}
};
class process
{
void qsort(Sample &s,int l,int h);
// 私有成员,由quicksort()成员调用
public:
void getdata(Sample &s);
void insertsort(Sample &s);
void shellsort(Sample &s);
void bubblesort(Sample &s);
void quicksort(Sample &s);
void selectsort(Sample &s);
void disp(Sample &s);
};
void process::getdata(Sample &s)
{
int i;
cout<<"元素个数:";
cin>>s.n;
for(i=0;i<s;i )
{
cout<<"输入第"<<i 1<<"个数据:";
cin>>s.A[i];
}
}
void process::insertsort(Sample &s) // 插入排序
{
int i,j,temp;
for(i=1;i<s.n;i )
{
temp=s.A[i];
j=i-1;
while(temp<s.A[j])
{
s.A[j 1]=s.A[j];
j--;
}
s.A[j 1]=temp;
}
}
void process::shellsort(Sample &s) // 希尔排序
{
int i,j,gap,temp;
gap=s.n/2;
while(gap>0)
{
for(i=gap;i<s;i )
{
j=i-gap;
while(j>=gap)
if(s.A[j]>s.A[j gap])
{
temp=s.A[j];
s.A[j]=s.A[j gap];
s.A[j gap]=temp;
j=j-gap;
}
else j=0;
}
gap=gap/2;
}
}
void process::bubblesort(Sample &s) // 冒泡排序
{
int i,j,temp;
for(i=0;i<s.n;i )
for(j=s.n-1;j>=i 1;j--)
if(s.A[j]<s.A[j-1])
{
temp=s.A[j];
s.a[j]=s.A[j-1];
s.A[j-1]=temp;
}
}
void process::quicksort(Sample &s) // 快速排序
{
qsort(s,0,s.n-1);
}
void process::qsort(Sample &s,int l,int h)
{
int i=l,j=h,temp;
if(l<h)
{ temp=s.A[l];
do
{
while(j>i&&s.A[j]>=temp)
j--;
if(i<j)
{
s.A[i]=s.A[j];
i ;
}
while(i<j&&s.A[i]<=temp)
i ;
if(i<j)
{
s.A[j]=s.A[i];
j--;
}
}while(i<j);
s.A[i]=temp;
qsort(s,l,j-1);
qsort(s,j 1,h);

}
}
void process::selectsort(Sample &s) // 选择排序
{
int i,j,k,temp;
for(i=0;i<s.n;i )
{
k=i;
for(j=i 1;j<=s.n-1;j )
if(s.A[j]<s.A[k])
k=j;
temp=s.A[i];
s.A[i]=s.A[k];
s.A[k]=temp;
}
}
void process::disp(Sample &s)
{
for(int i=0;i<s.n;i )
cout<<s.A[i]<<" ";
cout<<endl;
}
void main()
{
int sel;
Sample s;
process p;
p.getdata(s);
cout<<"原来序列:";
p.disp(s);
cout<<"0:插入排序 1:希尔排序 2:冒泡排序 3:快速排序 4:选择排序 其他退出"<<endl;
cout<<"选择排序方法:";
cin>>sel;
switch(sel)
{
case 0:
p.insertsort(s);
cout<<"插入排序结果:";
break;
case 1:
p.shellsort(s);
cout<<"希尔排序结果:";
break;
case 2:
p.bubblesort(s);
cout<<"冒泡排序结果:";
break;
case 3:
p.quicksort(s);
cout<<"快速排序结果:";
break;
case 4:
p.selectsort(s);
cout<<"选择排序结果:";
break;
}
p.disp(s);
}

本程式的执行结果如下:
元素个数:8
输入第1个数据: 1
输入第2个数据: 6
输入第3个数据: 5
输入第4个数据: 3
输入第5个数据: 4
输入第6个数据: 8
输入第7个数据: 2
输入第8个数据: 7
原来序列: 1 6 5 3 4 8 2 7
0:插入排序 1:希尔排序 2:冒泡排序 3:快速排序 4:选择排序 其他退出
选择排序方法: 1
希尔排序结果: 1 2 3 4 5 6 7 8




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 习题和解析(友元-03)

下一篇: C 习题和解析(友元-04)

热门词条
热门标签