冒泡算法
冒泡算法定义
冒泡排序:
作用:最常用的排序算法,对数组内元素进行排序
1、比较相邻的元素。如果第一个比第二个大,就将他们进行交换
2、对每一对相邻元素做相同的工作,执行完毕后,找到第一个最大值。
3、重复以上步骤,每次比较次数-1,直到不需要比较。
冒泡算法思路
比如说有这么一个一维数组{3,5,1,8,7,9, 6},一共有7个元素,因此数组内各元素的序号依次为0——6
第一次遍历时:
依次遍历比较相邻的两个数,每当后面那个元素小于前面那个元素时,交换两个元素的位置。
1、比较第0个元素和第1个元素,因为3<5,所以它们的次序不变。
2、比较第1个元素和第2个元素,因为5>1,所以交换它们的位置。此时更新数组为:
3,1,5,8,7,9,6
3、比较第2个元素和第3个元素,因为5<8,所以它们的次序不变。
4、比较第3个元素和第4个元素,因为8>7,所以交换它们的位置。此时更新数组为:
3,1,5,7,8,9,6
5、比较第4个元素和第5个元素,因为8<9,所以它们的次序不变。
6、比较第5个元素和第6个元素,因为9>6,所以交换它们的位置。此时更新数组为:
3,1,5,7,8,6,9
到此为止,就完成了第一次遍历。
由此类推,
第二次遍历的结果为:
1,3,5,7,6,8,9
第三次遍历的结果为:
1,3,5,6,7,8,9
到这里已经完成了整个冒泡排序。接下来是实现对一维数组冒泡排序的相关代码
代码实例
#include<iostream>
using namespace std;
int main()
{
/*
冒泡排序:
作用:最常用的排序算法,对数组内元素进行排序
1、比较相邻的元素。如果第一个比第二个大,就将他们进行交换
2、对每一对相邻元素做相同的工作,执行完毕后,找到第一个最大值。
3、重复以上步骤,每次比较次数-1,直到不需要比较。
*/
//首先先输入一个一维数组
int arr[10] = { 1,9,4,2,8,3,7,6,0,5 };
int temp = 0;
cout << "排序前的数组为:arr[10]={";
for (int i = 0; i < 10; i++)
{
cout << arr[i] << ",";
}
cout << "};" << endl;
for (int i = 0; i < 9; i++)//外层循环
{
for (int j = 0; j < 9 - i; j++)//内层循环,每经历一次内层循环,参与循环的元素个数-1
{
//如果排前面的数比后面那个大,就交换位置
while (arr[j] > arr[j + 1])
{
temp = arr[j+1];//当满足后面那个数小于前面那个数时,先用temp存储后面那个数
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
cout << "经过冒泡算法排序后的数组为:arr[10]={";
for (int i = 0; i < 10; i++)
{
cout << arr[i] << ",";
}
cout << "};" << endl;
system("pause");
return 0;
}
运行结果为:
排序前的数组为:arr[10]={1,9,4,2,8,3,7,6,0,5,};
经过冒泡算法排序后的数组为:arr[10]={0,1,2,3,4,5,6,7,8,9,};