步骤
从左到右,相邻元素进行比较,第一轮比较之后所有数中最大的数浮到最右边;第二轮比较后,所有数中第二大的数浮到倒数第二个位置;依次循环,最后实现从小到大的排序。
代码
void BubbleSort(int* arr, int size) {
//比较size-1轮
for (int i = 0; i < size - 1; i++) {
int flag = 0; //这一轮是否有相邻元素交换了位置
//每一轮少比较一个
for (int j = 0; j < size - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = 1;//有相邻元素交换了位置
}
}
//如果某一趟没有交换位置,则说明已经排好序,直接退出循环
if (flag == 0) {
break;
}
}
}
性能
时间复杂度:
- 平均:
- 最坏:
- 最好:
空间复杂度:
稳定性:稳定