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

书籍源码

开发平台:

Visual C++

  1. /* 6.5  编一个冒泡排序的成员函数模板实现降序排序。可用小于比较,冒泡采用从上往下;
  2. 也可用大于比较,冒泡采用从下往上。*/
  3. //使用字符串类string
  4. #include<iostream>
  5. #include<string>
  6. using namespace std;
  7. template <typename T,int size>class Orderedlist{
  8. int maxsize;
  9. int last;
  10. T slist[size];
  11. public:
  12. Orderedlist(){last=-1;maxsize=size;}
  13. void BubbleSort();
  14. bool Insert(T & elem,int i);
  15. void print();
  16. // 无关成员函数省略,缺省的=等不必定义
  17. };//再次指出分号不可少
  18. template <typename T,int size> bool Orderedlist<T,size>::Insert(T & elem ,int i){
  19. if (i<0||i>last+1||last==maxsize-1) return false;
  20. else{
  21. last++;
  22. for (int j=last;j>i;j--) slist[j]=slist[j-1];
  23. slist[i]=elem;
  24. return true;
  25. }
  26. }
  27. template <typename T,int size> void Orderedlist<T,size>::print(){
  28. int i;
  29. for(i=0;i<=last;i++){
  30. cout<<slist[i];
  31. if(i%5==4) cout<<endl;
  32. else cout<<'t';
  33. }
  34. cout<<endl;
  35. }
  36. template <typename T,int size> void Orderedlist<T,size>::BubbleSort(){//降序
  37. bool noswap;
  38. int i,j;
  39. T temp;
  40. for (i=last;i>0;i--){//从上往下冒泡,对比例6.8有何不同?
  41. noswap=true; //未交换标志为真
  42. for(j=0;j<i;j++){
  43. if(slist[j]<slist[j+1]){//关键字比较只用小于号!
  44. temp=slist[j];
  45. slist[j]=slist[j+1];
  46. slist[j+1]=temp;
  47. noswap=false;
  48. }
  49. }
  50. if(noswap) break; //本趟无交换,则终止算法。
  51. }
  52. }
  53. int main(){
  54. const int h=8;
  55. int i;
  56. Orderedlist<string,100> ordlist;
  57. string n[h];
  58. string sp[h]={"南京大学","东南大学","交通大学","清华大学",
  59. "天津大学","复旦大学","浙江大学","同济大学"};
  60. for(i=0;i<h;i++)  n[i]=sp[i];
  61. for(i=0;i<h;i++)  ordlist.Insert(n[i],i); //建立顺序表
  62. cout<<"未排序表:"<<endl;
  63. ordlist.print();
  64. ordlist.BubbleSort();
  65. cout<<"已排序表:"<<endl;
  66. ordlist.print();
  67. return 0;
  68. }