①冒泡法
version 1
普通排序

void bubble_sort_1(char a[],int len)
{
    int i, j,tmp=0;
    for (i = 0; i < len-1; i++)//len-1就是总数减去1等于趟数
    {
        for (j = 0; j < len - 1 - i; j++)//len-1-i是这一趟需要交换的次数
        {
            if (a[j] > a[j+1])
            {
                tmp = a[j+1];
                a[j + 1] = a[j];
                a[j] = tmp;
            }
        }
    }
}

version 2
加入flag,减少运算

void bubble_sort_2(char b[], int len)
{
    int i, j, tmp, flag = 1;
    for (i = 0; i < len - 1; i++)
    {
        for (j = 0; j < len - 1 - i; j++)
        {
            if (b[j] > b[j + 1])
            {
                tmp = b[j + 1];
                b[j + 1] = b[j];
                b[j] = tmp;
                flag = 0;
            }
        }
        if (flag)    
                break;
    }
}

version 3
考虑到以下情况,例如:十个数0543216789这种后面已经有序

void bubble_sort_3(char c[],int len)
{
    int i, j, tmp, sortborder = len - 1;
    int lastchange = 0,flag=1;
    for (i = 0; i < len - 1; i++)
    {
        for (j = 0; j < sortborder; j++)
        {
            if (c[j] > c[j+1])
            {
                tmp = c[j+1];
                c[j+1] = c[j];
                c[j] = tmp;
                flag = 0;
                lastchange = j;//用lastchange记录最后一次交换的下标
            }
        }
        sortborder = lastchange;
        if (flag) break;
    }
}

————————————待更新