C++中数组的冒泡排序

算法分析:
按降序排序时,若一组整数放在数组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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43778462/article/details/91364026