原理
通过将相邻的数相比较,永远让大的数在右边,一轮下来就可以让最大的数像泡泡一样浮到最右边,再把最右边的去掉,对剩下的采取同样的操作,反复即可
代码实现
void sort(int *arr, int n)
{
for (int j = n - 1; j > 0; j--)
{
for (int i = 0; i < j; i++)
{
if (arr[i] > arr[i + 1])
{
swap(&arr[i], &arr[i + 1]);
}
}
}
}
优化思路
当发现一轮下来没有发生交换的时候,说明序列已经排好了,可以停止算法了。
void sortP(int *arr, int n)
{
for (int j = n - 1; j > 0; j--)
{
int flag = 0;
for (int i = 0; i < j; i++)
{
if (arr[i] > arr[i + 1])
{
swap(&arr[i], &arr[i + 1]);
flag++;
}
}
if (flag == 0)
{
return;
}
}
}
更优化还可以记录不发生交换的边界,提前跳过已经排好序的部分
评价
比较弱小
第二简单的算法,但是比选择强点