冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:量量比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
冒泡的实现细节上可以有很多种变换,下面是最基本的冒泡排序算法的C++实现。
#include <iostream>
using namespace std;#define MaxSize 10
typedef struct
{
int r[MaxSize+1];
int length;
}SqList;
void swap(SqList *L,int i,int j)
{
int temp=L->r[i];
L->r[i]=L->r[j];
L->r[j]=temp;
}
void BubbleSort(SqList *L)
{
int len=L->length;
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
if(L->r[i]>L->r[j])
swap(L,i,j);
}
}
}
void main()
{
SqList L;
SqList *p=&L; //定义P为指向SqList数据类型的指针变量,并指向L。 注:L.length、(*p).length、p->length三者是等价的,“.”是成员运算符,“->”是指向运算符
cin>>L.length;
for(int i=0;i<L.length;i++)
{
cin>>L.r[i];
}
BubbleSort(p); //或BubbleSort(&L) 注:特别注意这里,实参应该是指针类型。
for(int j=0;j<L.length;j++)
{
cout<<L.r[j]<<" ";
}
}
下面这种是通过返回值来实现的,主要区别是 L=BubbleSort(L);这里的内容
/*#include <iostream>using namespace std;
#define MaxSize 10
typedef struct
{
int r[MaxSize+1];
int length;
}SqList;
SqList swap(SqList L,int i,int j)
{
int temp=L.r[i];
L.r[i]=L.r[j];
L.r[j]=temp;
return L; //如果不返回的话,只改变了形参,而实参L的值未改变
}
SqList BubbleSort(SqList L)
{
int len=L.length;
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
if(L.r[i]>L.r[j])
L=swap(L,i,j);
}
}
return L;
}
void main()
{
SqList L;
cin>>L.length;
for(int i=0;i<L.length;i++)
{
cin>>L.r[i];
}
L=BubbleSort(L);
for(int j=0;j<L.length;j++)
{
cout<<L.r[j]<<" ";
}
}*/