基本排序算法——冒泡(单向&双向冒泡)、插入、选择、奇偶

本文介绍了四种基本排序算法:冒泡排序(包括单向和双向冒泡)、插入排序、选择排序以及奇偶排序。详细讲解了每种算法的工作原理,时间复杂度和空间复杂度,并讨论了它们的稳定性和适用场景。对于接近有序的数组,插入排序表现最佳。
摘要由CSDN通过智能技术生成

接下来的坑是排序算法,首先给出几个以后都用得上的名词:

  • 时间复杂度:一个程序对n个数据需要的时间,考虑为n的函数
  • 空间复杂度:定义同上,不过是对空间
    上述两个一般只取n的函数的最高阶无穷小并且忽略倍数,如2n3+n2+5取n3即可;
  • 稳定/不稳定:是否交换了不需要交换的序列,
    检验方式为观看两个相等的数据(a[i]=a[j],其中i<j)在排序后相对顺序不变的为稳定
    比如121先交换两个1,然后交换成112(纯属口嗨,应该是没怎么皮的排序方式,但不稳定的算法还是有的)

基本算法

冒泡排序
又叫气泡,意思是模拟气泡在水中上升的过程。
(这个图是从最后一行看起的。。。)
在这里插入图片描述
假设写小的一端为水面,第一个处理的数据为2(最右边),然后不断和之前面的比较,交换;
然后再从最后一个元素开始:

但这次的比较少了一个,因为第一轮选择出来的元素一定是这里面最小的,所以不必比较;
重复上述过程,每一次减少一个元素,一共要四轮(总数减一,因为最后一个元素不必比较)
在这里插入图片描述
可能细心的你已经发现了,在第三轮交换结束后,得到的就是一个有序序列了,此时完全可以结束程序,所以我们还需要一个判断,及时停止程序。

void bubble(int *a,int length)//a[length]为从0到length-1都存储数据的数组
{
   
    int temp,sum=1;
    while(sum)
    {
   
        sum=0;//设置标记位减少不必要的排序
        for(int i=1;i<length;i++)
        {
   
            if(a[i-1]>a[i])
            {
   
                temp=a[i-1];
                a[i-1]=a[i];
                a[i]=temp;
                sum=1;
            }
        }//for
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值