冒泡排序原理 及 c++实现

冒泡排序原理

用文字来表达,冒泡排序正如其名字一样,每一次会有一个数据冒泡出来,这个数据可以是队列中的最大值,也可以是最小值;如果是最大值,则:通过从第一,二个数据开始比较,若第一个数大于第二个,则交换他们的位置,反之则不交换,接着,第二位与的三位比较,将较大的数放在第三位,重复如此,当第一次遍历完后,队列的最末尾的数就是队列中的最大值了(最大值冒了个泡),下一次遍历,就可以不用遍历这个最大值,重复这种方法,即可完成排序;

动图展示

在这里插入图片描述

代码展示

/*********************************************************************************
 *      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)

算法稳定性:稳定

猜你喜欢

转载自blog.csdn.net/weixin_45121946/article/details/105736917
今日推荐