文章目录
  1. 1. 冒泡排序
    1. 1.1. 思想
    2. 1.2. 代码实现

冒泡排序

思想

降序道理相同,这里不再例举。

代码实现

flag标志位表示该数组是不是有序的,遍历依此如果有序,则直接break

void BubbSort(int* a, size_t size)
{
    assert(a);
    int flag = 1;
    for (int i = 0; i < size; ++i)
    {
        for (int j = 1; j < size - i; ++j)
        {
            //升序
            if (a[j - 1] > a[j])
            {
                swap(a[j - 1], a[j]);
                flag = 0;
            }
        }
        if (flag)
            break;
    }
}

优化版
代码描述:
情景:假如有个a[100],前50位是有序的,后50位无序,或者,前50无序,后50有序
综合以上情况,代码如下:

如果说 j-1 , j 这两个位置发生了交换,那么说明从j这个位置开始往后可能是无序的,如果有序,就不发生交换,cur == 0; 循环结束;如果无序,则cur !=0 ,接着往下冒泡,直到有序。

void BubbOptimizaSort(int* a, size_t size)
{
    assert(a);
    int cur = size;
    while (cur > 0)
    {
        int tmp = cur; //保存size
        cur = 0;
        for (int j = 1; j < tmp; ++j)
        {
            if (a[j - 1] > a[j])
            {
                swap(a[j - 1], a[j]);
                cur = j;
            }
        }
    }
}
文章目录
  1. 1. 冒泡排序
    1. 1.1. 思想
    2. 1.2. 代码实现