C++模板类冒泡排序

Posted by Harid2010 - Dec - 04 留个言

鄙人最近想重拾C++,所以准备写一些小程序,今天呢上一个最简单的冒泡排序的模板类。菜鸟领地,埋有地雷,高手请绕行。

这个程序就没有什么说的了,冒泡排序的时间代价也是 n² 相关,不过容易实现,如果在急需排序却又想不起更有效的排序方法的时候,这个可以拿来用一下。

需要注意的一个地方是程序没有异常处理,如果是通过只传递Type *的构造函数的话可能会出现数组越界的危险。

sort.h代码:

#ifndef SORTSUB_H_
#define SORTSUB_H_
#include 
template 
class SortSub
{
private:
    Type * m_head;
    int m_length;
        bool m_detect;
protected:
    void getItems();
    int calLength(const Type*)const;
    void sort();
public:
    SortSub();
    SortSub(const Type*, const int);
    SortSub(const Type*);
    ~SortSub();
    int getLength()const{
        return this->m_length; }
    Type * getHead()const{
        return this->m_head; }
    void show();
};
template 
void SortSub::getItems()
{
    using namespace std;
    m_length = 0;
    m_head = 0;
    cout <<"Enter the length of your numbers:  ";
    while(!(cin >>m_length) || m_length<0 || cin.get()!='\n')
    {
        cerr <<"Enter error.Do it again:  ";
        cin.clear();
        while(cin.get()!='\n')
            continue;
    }
    m_head = new Type[m_length+1];
    for(int i=0; i>m_head[j]) || cin.get()!='\n')
        {
            cerr <<"\nEnter error.Do it again:  ";
            cin.clear();
            while(cin.get()!='\n')
                continue;
        }
    }
    sort();
}
template 
int SortSub::calLength(const Type* head)const
{
    int count = 0;
    if(head != 0)
        while(head[count] != '\0')
            count++;
    return count;
}
template 
void SortSub::sort()
{
    Type * head = getHead();
    int counts = getLength();
    for(int i=counts-1; i>0; i--)
        for(int j=0; jhead[j+1])
            {
                head[j+1] += head[j];
                head[j] = head[j+1] - head[j];
                head[j+1] -= head[j];
            }
        }
}
template 
SortSub::SortSub()
{
    getItems();
        m_detect = true;
}
template 
SortSub::SortSub(const Type* head,const int size)
{
    m_head = head;
    m_length = size;
        m_detect = false;
    sort();
}
template 
SortSub::SortSub(const Type* head)
{
    m_head = head;
    m_length = calLength(head);
        m_detect = false;
    sort();
}
template 
SortSub::~SortSub()
{
        if(m_detect)    
             delete [] m_head;
}
template 
void SortSub::show()
{
    using std::cout;
    Type * head = getHead();
    cout <<"\tThet ordered numbers are: \n\t";
    for(int i=0; i

        

   声明:本文采用 BY-NC-SA 协议进行授权 | 星期九
   原创文章转载请注明:转自《C++模板类冒泡排序

Comments(21) Leave comments
  1. Gravatar
    Kada Google Chrome Google Chrome 8.0.552.215 Windows Windows 7
    十二月 5th, 2010 at 22:54  | #1

    嗯,我的计划之内的事情。可惜现在做不了。

    • Gravatar Harid  @  十二月 6th, 2010 at 23:58 replied.

      @Kada, 最近在忙啥呢?

Pages:
78 + 62 =  (required)
comment_ad

 NOTICE1: You should type some Chinese word (like “你好”) in your comment to pass the spam-check, thanks for your patience!

 NOTICE2: 请申请gravatar头像(http://en.gravatar.com),木有头像的会显示为“小怪物”头像,将难以通过审核!

分享按钮