C++版本的冒泡排序

来源:互联网 发布:商家淘宝客推广 编辑:程序博客网 时间:2024/05/29 17:55
#include <iostream>using namespace std;#define MAXSIZE 100typedef int Status;#define OK  1#define ERROR 0#define TRUE  1#define FALSE 0template <typename T>class SqList{public:    T r[MAXSIZE+1];    int length;public:    SqList(T * var,int len);    SqList();    void printList();    void BubbleSort();    Status swapElement(int i, int j);};template <typename T>SqList<T>::SqList(T * var,int len){    length = len/sizeof(T);    memcpy(&(r[1]), var, len);}template <typename T>SqList<T>::SqList(){    memset(this, 0, sizeof(SqList));}template <typename T>Status SqList<T>::swapElement(int i,int j){    T tmp =this->r[i];    this->r[i] = this->r[j];    this->r[j] = tmp;    return OK;}template <typename T>void SqList<T>::printList(){    for (int i = 1; i <= length; i++)    {        cout << this->r[i] << "\t";    }    cout << endl;}/************************************************************************//* 1.升序,将小元素排到前面                                                                     *//************************************************************************//*相邻元素两两比较,如果存在反序则交换位置**一共需要n-1趟循环,外层循环是【1...n-1】**每趟循环能够把最小的元素冒泡到第一个元素**第i趟循环需要比较n-i次,内层循环是【n-1...i】*/template <typename T>void SqList<T>::BubbleSort(){    int i=0, j=0;    Status flag = TRUE;//用flag辅助循环结束的条件,优化冒泡排序算法。    for (i = 1; i < this->length && flag;i++)//跑多少趟    {        flag = FALSE;//每一趟进来默认表示不用进行下一趟比较了(进行该轮比较以后即可排序完毕)        for (j = this->length - 1; j >= i; j--)//每一趟比较无序序列的两两相邻的元素        {            if (this->r[j + 1] < this->r[j])//后一个元素比较小的话,交换位置            {                swapElement(j, j + 1);//小元素往上浮动                flag = TRUE;//发生数据交换(表示没有排好)以后还需要进行下一趟排序            }        }    }}int main(void){    int myList[9] = {90,10,50,80,30,70,40,60,20};    SqList<int> list(myList,sizeof(myList));    cout << "before sort:"<< endl;    list.printList();    list.BubbleSort();    cout << "after sort:" << endl;    list.printList();    cout<<"Hello!"<<endl;    system("pause");    return 0;}
0 0