冒泡排序又称起泡排序,是一种简单的交换排序方法。其基本思想是:依次比较整个序列中相邻的两个记录的关键字,如果逆序(即前一个记录的关键字大于后一个记录的关键字)就交换这两个记录,直到没有逆序的记录为止。
假设有待排序的n个记录存放在数组R[n]中,在使用冒泡排序时,首先将R[1]的关键字与R[2]的关键字进行比较,如果为逆序(即R[1].key>R[2].key),就交换这两个记录,若为顺序,则不交换位置,然后再比较R[2]的关键字和R[3]的关键字,依此类推,直到比较R[n-1]与R[n]的关键字后为止。这样的过程称为一趟冒泡排序,其结果是将关键字最大的记录调整到最后一个记录位置上。这样,在第一趟比较结束后,R[n]为关键字最大的记录。然后进行第二趟冒泡排序,再对前n-1个记录重复上述的操作,其结果是将余下的记录中关键字最大的记录调整到第n-1个记录的位置上,即R[n-1]为剩余记录中关键字最大的记录。由此可见,每一趟冒泡排序都会有一个无序区中的最大记录排到无序区的最后一个位置。这样在经过n-1趟排序之后,整个记录序列就变成有序序列。
源程序:
#include <iostream>
#include <cstdlib>
#include <ctime>
#define MAXSIZE 10
using namespace std;
void make_sorted(int * array) //随机生成100以内的乱序整数
{
static int t = 0;
srand((unsigned int)time(NULL) + t++);
cout << "随机生成的10个数为:";
for(int i = 1; i < MAXSIZE + 1; i++)
{
array[i] = rand() % 100;
cout << array[i] << " ";
}
cout << endl;
}
void bulloe_sort(int * array) //冒泡排序
{
for (int i = 1; i < MAXSIZE + 1; i++)
{
for (int j = 1; j < MAXSIZE + 1; j++)
{
if (array[j] > array[j + 1])
{
array[0] = array[j];
array[j] = array[j + 1];
array[j + 1] = array[0];
}
}
}
cout << "冒泡排序的结果为:";
for (int i = 1; i < MAXSIZE + 1; i++)
{
cout << array[i] << " ";
}
cout << endl;
}
int main()
{
int * array;
array = new int [MAXSIZE];
make_sorted(array);
bulloe_sort(array);
cout << endl;
delete [] array;
return 0;
}
演示结果截图: