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

书籍源码

开发平台:

Visual C++

  1. //【例6.8】冒泡排序算法,作为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 BubbleSort();
  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>::BubbleSort(){
  35. bool noswap;
  36. int i,j;
  37. T temp;
  38. for (i=0;i<last;i++){             //最多做n-1趟
  39. noswap=true;               //未交换标志为真
  40. for(j=last;j>i;j--){          //从下往上冒泡
  41. if(slist[j]<slist[j-1]){
  42. temp=slist[j];
  43. slist[j]=slist[j-1];
  44. slist[j-1]=temp;
  45. noswap=false;
  46. }
  47. }
  48. if(noswap) break;          //本趟无交换,则终止算法。
  49. }
  50. }
  51. class  student{
  52. int   id ;           //学号
  53. string name;         // 姓名
  54. char  sex;          // 性别
  55. int   age;          // 年龄
  56. string  address;      //家庭地址
  57. float  eng, phy, math, electron;     //英语,物理,数学和电子学成绩
  58. public:
  59. student(){}
  60. student(int,string,char,int,string,float,float,float,float);
  61. bool operator<(student ele){return id<ele.id;}
  62. void show(){cout<<id<<'t'<<name<<'t'<<sex<<'t'<<age<<'t'<<address<<'t'
  63. <<eng<<'t'<<phy<<'t'<<math<<'t'<<electron<<endl;}
  64. };
  65. student::student(int i,string n,char s,int a,string add,float en,float ph,float ma,float ele){
  66. id=i;           //学号
  67. name=n;         // 姓名
  68. sex=s;          // 性别
  69. age=a;          // 年龄
  70. address=add;      //家庭地址
  71. eng=en; phy=ph; math=ma, electron=ele;     //英语,物理,数学和电子学成绩
  72. }
  73. int main(){
  74. const int h=4;
  75. int i;
  76. Orderedlist<student,100> ordlist;
  77. student n[h]={
  78. 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.BubbleSort();
  87. cout<<"已排序表:"<<endl;
  88. ordlist.print();
  89. return 0;
  90. }