您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  C++习题与解析(友元-02) 【注册男护士专用博客】          

C++习题与解析(友元-02)

www.nanhushi.com     佚名   不详 

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 

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。