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

书籍源码

开发平台:

Visual C++

  1. /*【例6.10】冒泡排序算法。为了简单,采用函数模版对数组进行处理,
  2. 数据元素为第五章中自定义的字符串类mystring。
  3. */
  4. #include<iostream>
  5. using namespace std;
  6. const n=21; 
  7. class mystring{
  8. char str[n];        //存放字符串的数组容器
  9. int maxsize;          //最大可用元素数,可防止数组出界,提高健壮性
  10. int last;              //已用元素最大下标
  11. public:
  12. mystring(){
  13. last=-1;
  14. maxsize=n;
  15. str[0]='';
  16. }
  17. mystring(char *s){//当C字符串过长,初始化时采用截尾处理
  18. last=-1;
  19. maxsize=n;
  20. do{
  21. last++;
  22. str[last]=s[last];
  23. }while(s[last]!=''&&last<maxsize-1);
  24. str[last] =''; //截尾处理时,必须加串结束符
  25. }
  26. ~mystring(){}
  27. void show(){//如需重载<<,则请参见9.3节,暂时未学到,替代方法是改用show()函数
  28. cout<<str<<'t';
  29. }
  30. bool operator<(mystring &);
  31. mystring & operator=(char * ms);  //这里重载的=是把C风格字符串赋给mystring
  32. };
  33. bool mystring::operator<(mystring & ms){   //重载<运算符
  34. int i=0,k;
  35. do{
  36. k=str[i]-ms.str[i];
  37. i++;
  38. }while(k==0&&i<last&&i<ms.last);
  39. if(k<0) return true;
  40. if(i==last&&i!=ms.last) return true;
  41. return false;
  42. }
  43. mystring & mystring::operator=(char * ms){ //这里返回值为引用,不调用拷贝构造函数
  44. last=-1;
  45. do{
  46. last++;
  47. str[last]=ms[last];
  48. }while(ms[last]!=''&&last<maxsize-1);
  49. str[last] =''; //截尾处理时,必须加串结束符
  50. return *this;
  51. }
  52. template <typename T> void BubbleSort(T* slist,int n){
  53. bool noswap;
  54. int i,j;
  55. T temp;
  56. for (i=0;i<n-1;i++){             //最多做n-1趟
  57. noswap=true;               //未交换标志为真
  58. for(j=n-1;j>i;j--){          //从下往上冒泡
  59. if(slist[j]<slist[j-1]){
  60. temp=slist[j];
  61. slist[j]=slist[j-1];
  62. slist[j-1]=temp;
  63. noswap=false;
  64. }
  65. }
  66. if(noswap) break;          //本趟无交换,则终止算法。
  67. }
  68. }
  69. int main(){
  70. const int h=10;
  71. int i;
  72. mystring list[10]={"cat","book","car","zoo","fish","cab","dog","cap","fox","can"};
  73. cout<<"未排序数组:"<<endl;
  74. for(i=0;i<h;i++)  list[i].show(); 
  75. BubbleSort(list,h);
  76. cout<<"已排序数组:"<<endl;
  77. for(i=0;i<h;i++)  list[i].show(); 
  78. return 0;
  79. }