冒泡排序(C/C++实现)

时间:2022-02-25 09:49:19
#include <iostream>

using namespace std;

#define MAXSIZE 10


typedef struct{
    int data[MAXSIZE+1];  //data[0]作为哨兵
    int length;
}SqList;

void Swap(SqList *L, int i, int j)
{
    int tmp;

    tmp = L->data[i];
    L->data[i] = L->data[j];
    L->data[j] = tmp;
}

void BubbleSort01(SqList *L)
{
    int i, j;

    for(i=1; i<L->length; i++) {
        for(j=i+1; j<=L->length; j++) {
            if(L->data[j] < L->data[i]) {
                Swap(L, i, j); //如果后一个数据小于前一个数据,将两者进行交换
            }
        }
    }

}

//从后向前比较
void BubbleSort02(SqList *L)
{
    int i, j;

    for(i=1; i<L->length; i++) {
        for(j=L->length; j>i; j--) {
            if(L->data[j] < L->data[j-1]) {
                Swap(L, j, j-1); //如果后一个数据小于前一个数据,将两者进行交换
            }
        }
    }

}

//如果已经有序,则不再比较
void BubbleSort03(SqList *L)
{
    int i, j;
    bool flag = true;

    for(i=1; i<L->length && flag; i++) {

        flag = false;

        for(j=L->length; j>i; j--) {
            if(L->data[j] < L->data[j-1]) {
                Swap(L, j, j-1); //如果后一个数据小于前一个数据,将两者进行交换
                flag = true;
            }
        }
    }

}

int main()
{
    int i;
    SqList list;

    cout <<"Please input " <<MAXSIZE<<" number :" << endl;

    for(i=0; i<MAXSIZE; i++) {
        cin >> list.data[i+1];
    }

    list.length = 10;

    cout <<"The numbers before sort: ";
    for(i=0; i<MAXSIZE; i++) {
        cout << list.data[i+1] << " ";
    }
    cout << endl;

    BubbleSort03(&list);

    cout <<"The numbers after sort: ";
    for(i=0; i<MAXSIZE; i++) {
        cout << list.data[i+1] << " ";
    }
    cout << endl;

    return 0;
}