相邻的两个数比较
比较后按要求(正序或者逆序)交换位置
n个数字只需比较n-1次,因为每一次都有一个最大(小)的数排在正确位置,当n-1个数都按正确位置排布后,最后一个数的位置自然也是正确位置。
每次的内循环都有一个数字排进正确位置,所以随着外循环的次数变多,内循环的次数变少。第一轮外循环后就有一个数排在正确位置,第二轮后就有两个...,第i轮则有i个数排在正确位置,排列好的这些数不用再进入内循环。
void bubbling_sort(int* arr, int len)
{
for (int i = 0; i < len - 1; i++)//总共循环n-1次
{
for (int j = 0; j < len - 1 - i; j++)//(len-1)-i,相当于排列好的数不进入内循环
{
if (*(arr + j) < *(arr + j + 1))//由大到小
{
int temp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = temp;
}
}
}
}