1. 基本思想
(1) 核心
通过交换使相邻的两个数变成小数在前大数在后。
(2) 过程
1) 比较相邻的元素,如果第一个比第二个大,就交换。
2) 这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3) N=N-1, 如果N不为0就重复前面二步,否则排序完成。
2. 算法实现(C语言)
void bubblesort(int arr[], int len)
{
int i, j;
for (i = 0; i < len; i++)//已经排好序的个数
for (j = 1; j < len-i; j++)//两两交换过程
if (arr[j-1] > arr[j])
swap(&arr[j-1], &arr[j]);
}
其中swap为交换函数
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
3. 性能分析
(1) 时间复杂度:用基本语句执行次数的数量级来衡量
基本语句是比较和交换语句,平均时间复杂度是O(n^2)
(2) 空间复杂度
两两交换需要一个额外的空间,故空间复杂度为O(1)。
(3) 稳定性
相邻的两个元素交换,相同元素之间的相对位置并没有改变,故稳定。