冒泡排序<我的算法成长经历>

桶排序在时间和空间占用上可以说是非常巨大,比如要对一组五个数字排序,但里边有一个非常大的数字1999909,这个时候就需要申请一个非常大的数组,a[1999909],可见咋空间复杂度和时间复杂度非常高,而且非常浪费,这个时候冒泡排序法就展现出它的特点了:
冒泡排序::
这里有一个形象的代名词:邻居好说话,就是说相邻的两个数交换,冒泡排序的原理是每一趟只能将一个数归位,这就体现出它的时间空间复杂度。有n个数字的话,就需要最多n-1趟(次)排序。

#include <stdio.h> 
int main() 
{       
    int a[100], i, j, t, n;     
    scanf("%d", &n);                          //输入一个数n,表示接下来有n个数     

    for(i=1;i<=n;i++)                         //循环读入n个数到数组a中 
        scanf("%d", &a[i]);

    for (i = 1; i <= n - 1; i++)              //n个数排序,只用进行n-1趟 
    {
        for (j = 1; j <= n - i; j++)         //从第1位开始比较直到最后一个尚未归位的数。
        { 
            if (a[j]<a[j + 1])               //比较大小并交换 
            {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }     
    for (i = 1; i <= n; i++)          
        printf("%d ",a[i]); 

    getchar(); 
    getchar();     
    return 0;
}

这就是冒泡排序,核心内容就是两个for循环。进行n-1次,每次进行几次交换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值