浅析冒泡排序

目录

浅析冒泡排序

一、算法原理

 二、时间复杂度分析

三、优化之短冒泡


浅析冒泡排序

一、算法原理

对数据的处理来看,排序是必不可少的一个环节,如期末考试成绩排序,或购物商城价格排序等。今天简单聊一聊经典算法冒泡排序,冒泡排序是通过比较交换元素来实现的,是一种最基础的交换排序,之所以称为冒泡,是因为排序的过程就好像气泡上升一样,把元素逐个往数组一侧移动。

先上代码:

void bubble_sort(int arr[], int n) // 数组arr,长度n
{
    for (int i = 0; i < n; i ++ )
        for (int j = 1; j < n - i; j ++ )
            if (arr[j-1] > arr[j]) swap(arr[j], arr[j-1]); // 比较相邻元素并交换位置
}

 二、时间复杂度分析

对于给定序列,不管一开始元素是如何排列的,给含有n 个元素的数组排序总需要遍历n-1 轮,每当一个元素被移动到右侧,即排序好一个元素,剩余元素的比较次数也相应减少1轮,那么总比较次数即为(n-1)+(n-2)+…+1,很明显这是一个等差数列,首项为1,公差为1,项数为n-1,运用等差数列求和公式得Sn = (1+(n-1))*n/2。用大O表示法,取最高阶指数项,时间复杂度为O(n2)。

三、优化之短冒泡

冒泡排序作为最基础的交换排序算法,通常被认为是效率最低的排序算法,因为在确定最终的位置前,必须交换元素,但由于冒泡排序会对未排序元素进行完全遍历,它也具有其他排序算法没有的用途,那就是在应对部分有序的序列时,可以通过优化代码,大大提高运行速度,这就是所谓的短冒泡。

短冒泡通过元素交互与否来判断待排序元素是否已经有序,若已经有序则不再进行比较,代码如下:

void bubble_sort(int arr[], int n) // 数组arr,长度n
{
    bool exchange = true;
    while (n - 1 > 0 && exchange)
    {
        exchange = false;
        for (int i = 0; i < n; i ++ )
            for (int j = 1; j < n - i; j ++ )
                if (arr[j-1] > arr[j]) 
                {
                    swap(arr[j], arr[j-1]); 
                    exchange = true;  // 发生了交换
                }
    }
}

冒泡排序到此告一段落,你学费了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值