基础算法-冒泡排序

算法分析:

  • 时间复杂度:O(n²)

  • 空间复杂度:O(1)

算法特点:

  • 稳定排序

  • 可用于链式存储结构

  • 移动记录次数较多,算法的平均时间性能比直接插入排序的差。当初始记录无序、n较大时,此算法不宜使用

#include <iostream>
#include <cstdio>
using namespace std;

const int N = 10010;    //定义数组最大长度

void Bubble_sort(int arr[], int n); //声明冒泡排序函数
void Swap(int *a, int *b);  //声明值交换函数

int main()
{
    int n; cin >> n;    //输入要排序的数组长度

    int arr[N]; //定义数组

    for(int i = 0; i < n; i++) cin >> arr[i];   //输入n个数

    Bubble_sort(arr, n);    //进行冒泡排序

    for(int i = 0; i < n; i++) cout << arr[i] << " ";   //输出排序结果

    return 0;
}

//定义冒泡排序函数,参数为数组arr[],数组长度n
void Bubble_sort(int arr[], int n)
{
    bool flag = true;   //定义排序结束标志flag

    for(int i = n-1; i > 0 && flag; i--)    //外层循环,冒泡排序是从后往前确定的
    {
        flag = false;   //每次排序时将flag重置为false,若flag值不改变,说明排序已完成
        for(int j = 1; j <= i; j++) //内层循环从前往后两两比较,将较大值后移
        {
            if(arr[j] < arr[j-1])   //当后一个数小于前一个数则调换两个数的位置
            {
                Swap(&arr[j-1], &arr[j]);   //将两个值进行交换
                flag = true;    //一旦发证值交换则说明数组排序尚未结束,将flag改为true进入下一次循环
            }
        }
    }
}

//定义值交换函数
void Swap(int *a, int *b)
{
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}

/*
    冒泡排序是从前往后比较,从后往前确定的一种算法
    从前往后两两比较,找到其中较大值进行后移
    一轮排序结束后,会找到一个最大值放在数组的末尾
    之后按照这个顺序能找到第二大的值放在数组倒数第二的位置
    以此类推
    flag的意义是在一些情况小下,可能循环为遍历完就排序完成了
    此时我们不需要进行接下来的比较了,可以直接跳出循环宣布排序完成
*/

欢迎大家探讨

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值