数据结构排序算法之冒泡

算法介绍

冒泡排序也叫起泡排序,它是通过一系列的交换动作完成的。首先第一个记录和第二个记录比较,如果第一个比较大,则二者进行交换,否则不交换;然后第二个和第三个进行 比较,如果第二个比较 大,则二者交换,否则不交换···一直按照这种方式排序下去,最终最大的那个数据将被排到最后的位置。

算法流程

原始序列:23 12 8 34 21

1).下面开始进行第1趟排序:23 12 比较,交换

结果:12 23 8 34 21

    2).23 比较,交换

结果:12 8 23 34 21

    3).23 34 比较,不交换

结果:12 8 23 34 21

    4).34 21 比较,交换

结果:12 8 23 21 34

 

第一趟冒泡结束后,最大的数据34被交换到了最后,接下来开始剩下的 12 8 23 21 进行冒泡排序,按照同样的方法进行第二趟排序。

要注意的是,冒泡排序算法结束的条件是一趟排序过程中没有发生元素交换。

代码示例

int bubblesort(int a[],int n)
{
        int i=0,j=0;
        for( i=0;i<n -1;i++)//n个数据需要进行n-1趟排序
        {
                int flag =0;
                for(j=0;j<n-1-i;j++)//每趟排序结束后,进行比较的元素就会自动减少
                {
                   if(a[j]>a[j+1])
                        {
                          int temp = a[j];
                          a[j] =a[j+1];
                          a[j+1] = temp;
                          flag =1;//如果元素发生了交换,则置标志位为1
                        }
                }
                if(flag == 0)
                {
                        return 0;
                }
        }
        return 0;
}

性能分析

1. 时间复杂度分析

1)最坏情况下,待排序是逆序,此时可对于外层循环的每次执行,内层循环条件a[j]>a[j+1]始终成立。及基本操作执行的次数为n-ii的取值为0~n-1.因此基本操作的执行次数为:(n-1+1)(n-1)/2 = n(n-1)/2,时间复杂度为n的平方

2)最好的情况是本身就是有序的,时间复杂度为n

2. 空间复杂度分析

由代码可以看出,额外的辅助空间只有一个tmp,空间复杂度始终为O(1).

更多内存请关注

http://wenku.baidu.com/p/helpylee


转载于:https://my.oschina.net/helpylee/blog/357516

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值