Ex6_9.cpp
上传用户:wuzhousb
上传日期:2022-07-12
资源大小:380k
文件大小:2k
源码类别:

书籍源码

开发平台:

Visual C++

  1. //【例6.9】直接选择排序,作为Orderedlist<T,size>类的成员函数。
  2. #include<iostream>
  3. #include<string>
  4. using namespace std;
  5. template <typename T,int size>class Orderedlist{
  6. int maxsize;
  7. int last;
  8. T slist[size];
  9. public:
  10. Orderedlist(){last=-1;maxsize=size;}
  11. void SelectSort();
  12. bool Insert(T & elem,int i);
  13. void print();
  14. // 无关成员函数省略
  15. };//再次指出分号不可少
  16. template <typename T,int size> bool Orderedlist<T,size>::Insert(T & elem ,int i){
  17. int j;
  18. if (i<0||i>last+1||last==maxsize-1) return false;
  19. else{
  20. last++;
  21. for (j=last;j>i;j--) slist[j]=slist[j-1];
  22. slist[i]=elem;
  23. return true;
  24. }
  25. }
  26. template <typename T,int size> void Orderedlist<T,size>::print(){
  27. int i;
  28. for(i=0;i<=last;i++){
  29. slist[i].show();
  30. if(i%5==4) cout<<endl;
  31. }
  32. cout<<endl;
  33. }
  34. template <typename T,int size> void Orderedlist<T,size>::SelectSort(){
  35. int i,j,k;
  36. T temp;
  37. for(i=0;i<last;i++){
  38. k=i;
  39. temp=slist[i];
  40. for(j=i;j<=last;j++)
  41. if(slist[j]<temp){
  42. k=j;
  43. temp=slist[j];
  44. }
  45. if(k!=i){
  46. temp=slist[i];
  47. slist[i]=slist[k];
  48. slist[k]=temp;
  49. }
  50. }
  51. }
  52. class  student{
  53. int   id ;           //学号
  54. string name;         // 姓名
  55. char  sex;          // 性别
  56. int   age;          // 年龄
  57. string  address;      //家庭地址
  58. float  eng, phy, math, electron;     //英语,物理,数学和电子学成绩
  59. public:
  60. student(){}
  61. student(int,string,char,int,string,float,float,float,float);
  62. bool operator<(student ele){return id<ele.id;}
  63. void show(){cout<<id<<'t'<<name<<'t'<<sex<<'t'<<age<<'t'
  64. <<eng<<'t'<<phy<<'t'<<math<<'t'<<electron<<endl;}
  65. };
  66. student::student(int i,string n,char s,int a,string add,float en,float ph,float ma,float ele){
  67. id=i;           //学号
  68. name=n;         // 姓名
  69. sex=s;          // 性别
  70. age=a;          // 年龄
  71. address=add;      //家庭地址
  72. eng=en; phy=ph; math=ma, electron=ele;     //英语,物理,数学和电子学成绩
  73. }
  74. int main(){
  75. const int h=4;
  76. int i;
  77. Orderedlist<student,100> ordlist;
  78. student n[h]={student(6004327,"张菲",'m',19,"北京路58号",80,85,90,78),
  79. student(6004121,"关雨",'w',19,"天津路64号",88,75,91,68),
  80. student(6004118,"刘蓓",'w',18,"上海路37号",78,95,81,88),
  81. student(6004219,"赵昀",'m',18,"重庆路95号",78,95,81,88),
  82. };
  83. for(i=0;i<h;i++)  ordlist.Insert(n[i],i); //建立顺序表
  84. cout<<"未排序表:"<<endl;
  85. ordlist.print();
  86. ordlist.SelectSort();
  87. cout<<"已排序表:"<<endl;
  88. ordlist.print();
  89. return 0;
  90. }