什么是冒泡排序?
冒泡排序是一种交换排序,所谓交换,就是将相邻元素两两比较,如果反序则进行交换从而使元素有序。之所以叫冒泡排序是因为,元素是从最后开始进行两两比较,将小的元素放到最上面的位置,看上去就跟气泡往上冒一样。
代码实现:
<span style="font-family:Courier New;font-size:14px;">#include <iostream>
#define MAXSIZE 10
using namespace std;
struct SqList {
int r[MAXSIZE];
int length;
};
//元素交换
void swap(SqList *L,int i,int j) {
int temp;
temp = L->r[i];
L->r[i] = L->r[j];
L->r[j] = temp;
}
/**
冒泡排序 共需进行n-1趟
从最后一个元素开始依次与前一个元素进行比较,
若小于前一个元素,则进行交换
*/
void BubbleSort(SqList *L) {
int i,j;
for(i=1;i<L->length;i++) {
for(j=L->length-1;j>=i;j--) {
if(L->r[j]>L->r[j+1]) {
swap(L,j,j+1);
}
}
}
}
/**
增进版 冒泡排序
这是为了再进行一两次比较后,元素已经有序了,
后面不再需要进行比较排序了。
比如序列:2,1,3,4,5,6,7,8,9
当进行完依次比较后,此时序列为1,2,3,4,5,6,7,8,9
那么此时已经有序了,因此后面就无序比较,直接退出循环就行
所以,引入一个标志变量,当元素交换时置为true,没有时置为false
则在外循环中,当变量为false时,就退出循环了,说明此时已经有序了
*/
void BubbleSort2(SqList *L) {
int i,j;
bool flag = true;
for(i=1;i<L->length&&flag;i++) {
flag = false;
for(j=L->length-1;j>=i;j--) {
if(L->r[j]>L->r[j+1]) {
swap(L,j,j+1);
flag = true;
}
}
}
}
void Print(SqList *L) {
for(int i=1;i<=L->length;i++) {
cout<<L->r[i]<<" ";
}
cout<<endl;
}
int main()
{
SqList s={{0,9,1,5,8,3,7,4,6,2},9}; //0为占位
cout<<"排序前:"<<endl;
Print(&s);
BubbleSort(&s);
cout<<"排序后:"<<endl;
Print(&s);
return 0;
}
</span>