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
 
2/2 首页 上一页 1 2 |