博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
冒泡排序
阅读量:4711 次
发布时间:2019-06-10

本文共 4146 字,大约阅读时间需要 13 分钟。

    今天,我们一起用C++写一个冒泡排序,目的就是通过不断地实践来熟练C++,具体代码如下:

Data.h具体内容:

template
class Element{public: Type GetKey(){ return key; } void SetKey(Type item){ key = item; }public: Element
& operator =(Element
copy){ key = copy.key; return *this; } bool operator ==(Element
item){ return this->key == item.key; } bool operator !=(Element
item){ return this->key != item.key; } bool operator <(Element
item){ return this->key < item.key; } bool operator >(Element
item){ return this->key > item.key; } bool operator >=(Element
item){ return this->key >= item.key; } bool operator <=(Element
item){ return this->key <= item.key; }private: Type key;};template
class Sort;template
class DataList{public: friend class Sort < Type > ; DataList(int size = m_nDefaultSize) : m_nMaxSize(size), m_ncurrentsize(0){ m_pvector = new Element
[size]; } DataList(Type *data, int size); bool Insert(Type item); ~DataList(){ delete[] m_pvector; } int Size(){ return this->m_ncurrentsize; } void Swap(Element
&left, Element
&right){ Element
temp = left; left = right; right = temp; } void Print();private: static const int m_nDefaultSize = 10; Element
*m_pvector; const int m_nMaxSize; int m_ncurrentsize;};template
DataList
::DataList(Type *data, int size) : m_nMaxSize(size > m_nDefaultSize ? size : m_nDefaultSize), m_ncurrentsize(0){ this->m_pvector = new Element
[size]; for (int i = 0; i < size; i++){ this->m_pvector[i].SetKey(data[i]); } this->m_ncurrentsize += size;}template
bool DataList
::Insert(Type item){ if (this->m_ncurrentsize == this->m_nMaxSize){ cerr << "The list is full!" << endl; return 0; } this->m_pvector[this->m_ncurrentsize++].SetKey(item);}template
void DataList
::Print(){ cout << "The list is:"; for (int i = 0; i < this->m_ncurrentsize; i++){ cout << " " << this->m_pvector[i].GetKey(); }}
LinkQueue.h具体内容:

#include "QueueNode.h"template
class LinkQueue{public: LinkQueue() :m_prear(NULL), m_pfront(NULL){} ~LinkQueue(){ MakeEmpty(); } void Append(const Type item); Type Delete(); Type GetFront(); void MakeEmpty(); bool IsEmpty() const{ return m_pfront == NULL; } void Print();private: QueueNode
*m_prear, *m_pfront;};template
void LinkQueue
::MakeEmpty(){ QueueNode
*pdel; while (m_pfront){ pdel = m_pfront; m_pfront = m_pfront->m_pnext; delete pdel; }}template
void LinkQueue
::Append(const Type item){ if (m_pfront == NULL){ m_pfront = m_prear = new QueueNode
(item); } else{ m_prear = m_prear->m_pnext = new QueueNode
(item); }}template
Type LinkQueue
::Delete(){ if (IsEmpty()){ cout << "There is no element!" << endl; exit(1); } QueueNode
*pdel = m_pfront; Type temp = m_pfront->m_data; m_pfront = m_pfront->m_pnext; delete pdel; return temp;}template
Type LinkQueue
::GetFront(){ if (IsEmpty()){ cout << "There is no element!" << endl; exit(1); } return m_pfront->m_data;}template
void LinkQueue
::Print(){ QueueNode
*pmove = m_pfront; cout << "front"; while (pmove){ cout << "--->" << pmove->m_data; pmove = pmove->m_pnext; } cout << "--->rear" << endl << endl << endl;}
QueueNode.h具体内容:

template
class LinkQueue;template
class QueueNode{private: friend class LinkQueue < Type > ; QueueNode(const Type item, QueueNode
*next = NULL) :m_data(item), m_pnext(next){}private: Type m_data; QueueNode
*m_pnext;};
Sort.h具体内容如下:

#include "Data.h"#include "LinkQueue.h"template
class Sort{public: void BubbleSort(DataList
&list);private: void BubbleSwap(DataList
&list, const int n, int &flag);};
main.cpp具体内容如下:

#include 
using namespace std;#include "Sort.h"int main(){ int init[15] = { 1, 3, 5, 7, 4, 2, 8, 0, 6, 9, 29, 13, 25, 11, 32 }; DataList
data(init, 15); Sort
sort; data.Print(); cout << endl << endl << endl; sort.BubbleSort(data); data.Print(); cin.get(); return 0;}
运行效果如图1所示:

图1 运行效果

转载于:https://www.cnblogs.com/new0801/p/6176924.html

你可能感兴趣的文章
Recursion
查看>>
66. Plus One
查看>>
COMP30023 Computer Systems 2019
查看>>
CSS选择器分类
查看>>
Kali学习笔记39:SQL手工注入(1)
查看>>
C# MD5加密
查看>>
Codeforces Round #329 (Div. 2)D LCA+并查集路径压缩
查看>>
移动应用开发测试工具Bugtags集成和使用教程
查看>>
Java GC、新生代、老年代
查看>>
Liferay 6.2 改造系列之十一:默认关闭CDN动态资源
查看>>
多线程
查看>>
折线切割平面
查看>>
获取当前路径下的所有文件路径 :listFiles
查看>>
图像形态学及更通用的形态学的原理及细节汇总
查看>>
linux开启coredump的3种方法
查看>>
数据驱动之 python + requests + Excel
查看>>
小鸡啄米问题求解
查看>>
Castle.net
查看>>
HDU1532 网络流最大流【EK算法】(模板题)
查看>>
PHP使用curl替代file_get_contents
查看>>