冒泡排序原理
用文字来表达,冒泡排序正如其名字一样,每一次会有一个数据冒泡出来,这个数据可以是队列中的最大值,也可以是最小值;如果是最大值,则:通过从第一,二个数据开始比较,若第一个数大于第二个,则交换他们的位置,反之则不交换,接着,第二位与的三位比较,将较大的数放在第三位,重复如此,当第一次遍历完后,队列的最末尾的数就是队列中的最大值了(最大值冒了个泡),下一次遍历,就可以不用遍历这个最大值,重复这种方法,即可完成排序;
动图展示
代码展示
/*********************************************************************************
* Copyright: (C) 2020 Xiao yang IoT System Studio
* All rights reserved.
*
* Filename: Bubble_Sort.cpp
* Description: 冒泡排序算法
*
* Version: 1.0.0(04/24/2020)
* Author: Lu Xiaoyang <[email protected]>
* ChangeLog: 1, Release initial version on "04/24/2020 06:22:44 PM"
*
********************************************************************************/
#include <iostream>
using namespace std;
#define BUF_SIZE 8
/*******************************************************************************
* 函数名:print
* 功能:按顺序打印数组元素
* 参数:arr - 要打印的数组,len:数组长度
* 返回值:无
******************************************************************************/
void print(int arr[],int len)
{
for(int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
/*******************************************************************************
* 函数名:BubbleSort
* 功能:以冒泡排序的方式排序数组
* 参数:arr - 要排序的数组,len - 数组元素个数
* 返回值:无
******************************************************************************/
void BubbleSort(int arr[],int len)
{
int temp;
for(int i = 0; i < len; i++) //外层循环控制轮数;
{
for(int j = 0; j < len - i; j++) //内存循环负责找到最大值;
{
if(arr[j] <= arr[j+1])
{
continue;
}
else //交换位置
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
// 主函数
int main()
{
int arr[BUF_SIZE] = {0};
cout << "请输入数组的8个元素" << endl;
for(int i = 0; i < BUF_SIZE; i++)
{
cin >> arr[i];
}
cout << "排序前,数组的顺序是:" << endl;
print(arr,BUF_SIZE);
BubbleSort(arr,BUF_SIZE-1);
cout << "使用冒泡排序结束,数组元素的顺序目前是:" << endl;
print(arr,BUF_SIZE);
return 0;
}
运行结果展示
我是在linux环境下编写的程序,因此需要使用 g++ 编译器进行编译,linux默认没有g++编译器,要安装g++编译器,可使用下面命令进行安装:
sudo apt-get install build-essential
编译运行:
可以一次性输入所有数据并用空格隔开,像我这样,也可以每输入一个数后按enter;
时间复杂度:O(n^2)
算法稳定性:稳定