①冒泡法
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;
}
}
——————————待更新