通过将相邻的数相比较,永远让大的数在右边,一轮下来就可以让最大的数像泡泡一样浮到最右边,再把最右边的去掉,对剩下的采取同样的操作,反复即可
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; } } }
更优化还可以记录不发生交换的边界,提前跳过已经排好序的部分
比较弱小
第二简单的算法,但是比选择强点