基础算法-冒泡排序

冒泡排序:

思想:数组分为左右两部分,无序区,和有序区,开始数全在无序区,有序区长度为0

从无序区开始位置到无序区结束位置遍历,相邻的两个数相互比较,如果当前的数比它后面的数大,那么就交换他们的位置,这样第一遍后,就将最大的数放到了无序区最后面的位置,此时也就是数组的最后面,现在有序区有一个数,

然后第二遍遍历则把无序区剩下的数的最大值交换到了此时无序区最后面的位置,也就是数组的倒数第二个位置,这样每次把无序区间剩余数的最大值交换到无序区的最后面,与之前有序区构成新的有序区。

这里对于[5 4 2 3 1]模拟一遍过程
[5 4 2 3 1][]
[4 5 2 3 1][]
[4 2 5 3 1][]
[4 2 3 5 1][]
[4 2 3 1 5][]


[42 3 1][5]


[243 1][5]

[2 3 4 1][5]
[2 3 1 4][5]


[2 3 1][4 5]


[2 3 1][4 5]
[2 1 3][4 5]


[21][3 4 5]

[1 2][3 4 5]
[1][2 3 4 5]

最后[1 2 3 4 5]

#include "array.h"
void isortcpp(int a[],int n)
{
    //对于长度为n的数组来说,执行n-1次后,就将前n-1大的数排好序了,只剩最小的一个数,所以遍历n-1次就够了
    for(int i=0;i<n-1;i++)
        //对于第i次遍历,当前有序区的长度为i,那么n-i就是无序区结束位置,每次把当前的数和后一个位置比较,
        //那么到n-i-1时就已经把最大值交换到了无序区最后面了
        for(int j=0;j<n-i-1;j++)
            if(a[j]>a[j+1])
                swap(a[j],a[j+1]);
}

void isort(int a[],int n)
{
    for(int i=0;i<n-1;i++){
        for(int j=0;j<n-i-1;j++){
            int t=a[j];
            a[j]=a[j+1];
            a[j+1]=t;
        }
    }
}
int main()
{
    int a[10];
    getRandArray(a,10);
    print(a,10);
    isort(a,10);
    print(a,10);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值