冒泡排序
-
什么是冒泡排序
冒泡排序是一种最简单的交换排序方法,它通过两两比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字小的记录如气泡一样上浮,关键字大的像石头一样下沉。 -
冒泡排序的算法步骤
(1) 设待排序的记录存放在数组r[1…n]中。首先将第一个记录和第二个记录的关键字进行比较,若为逆序,则交换两个记录。然后比较第二个记录和第三个记录的关键字。以此类推,直至第n-1个记录和第n个记录进行比较为止。上述过程为第一趟冒泡排序,使得最大的关键字被安放到最后一个记录上。
(2)然后进行第二趟冒泡排序,对前n-1个记录进行同样操作,其结果是使关键字次大的记录被安置到第n-1个记录的位置上。
(3)重复以上过程,直到在某一次过程中没有进行交换记录的操作,说明序列已全部达到排列要求,则完成排序。 -
代码实现
#include<iostream>
using namespace std;
#define MAXSIZE 20
typedef int KeyType;
typedef struct
{
KeyType key;//关键字
int other;//其他信息
}RedType;
typedef struct
{
RedType r[MAXSIZE];
int length;
}SqList;
void CreateSqList(SqList& L)
{
cout << "表的长度:";
cin >> L.length;
cout << "表的关键字信息:";
for (int i = 0; i < L.length; i++)
{
cin >> L.r[i].key;
}
}
void BubbleSort(SqList& L)
{
bool flag = true;//用来标记某一趟排序是否发生交换
for (int i = L.length-1; i >= 0 && flag; i--)//若flag为false,不在执行下次排序
{
flag = false;
for (int j = 0; j < i; j++)
{
if (L.r[j].key > L.r[j + 1].key)
{
flag = true;
KeyType key = L.r[j].key;
L.r[j].key = L.r[j + 1].key;
L.r[j + 1].key = key;
}
}
}
}
void Show(SqList L)
{
for (int i = 0; i < L.length; i++)
{
cout << L.r[i].key << " ";
}
}
int main()
{
SqList L;
CreateSqList(L);
BubbleSort(L);
cout << "排好序的表为:";
Show(L);
return 0;
}