算法分析:
按降序排序时,若一组整数放在数组a[0],a[1],……,a[n-1]中,
冒泡排序法是采用相邻元素比较的方法所以第一轮比较是让a[0]和a[1]比较
如果a[0]大于a[1]就交换数组存放的数据,反之则不交换,然后再让a[1]和
a[2]进行比较,如果a[1]大于a[2]就交换数组存放的数据,反之则不交换,
以此类推直到a[n-2]与a[n-1]比较。为了使效率的到优化增加一个判断
在一次循环中没有交换过数据就直接跳出循环输出结果。
算法描述:
for (int i = 1; i < size; i++) //一共要走size-1趟
{
从a[0]到a[n-1]中找到最大值max;
放到数组的最后一位;
}
细化寻找最大元素算法:
每一趟寻找中,把最大值放到最后数组坐标里。
声明一个默认值为1的变量。在一趟寻找中交换过数据
时使它设为0,没有交换数据就跳出循环。
int w, max;
w = 1;
for (int j = 0; j < size-i; j++)
{
if (a [j]<a [j+1])
{
max = a [j];
a [j] = a [j + 1];
a [j + 1] = max;
w = 0;
}
}
if (w)
{
break;
}
最后举个冒泡排序的例子如下:
#include<iostream>
#include<time.h>
using namespace std;
int main()
{
int arr[10];
srand(time(0)); //调用种子函数
for (int i = 0; i < 10; i++)
{
arr[i] = rand() % 100; //用随机函数初始化数组
}
for (int j = 0; j < 10; j++)
{
cout << arr[j] << ends; //输出原始序列
}
cout << endl;
int w, max; //声明最大值和判断变量
for (int i = 1; i < 10; i++)
{
w = 1; //每一趟的值设为1;
for (int j = 0; j < 10-i; j++)
{
if (arr[j]<arr[j+1]) //相邻的两个数组进行比较
{ //把小的放在后面
max = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = max;
w = 0;
}
}
if (w) //w不等于0跳出循环
{
break;
}
}
for (int j = 0; j < 10; j++)
{
cout << arr[j] << ends; //输出排序后序列
}
cout << endl;
}