冒泡排序

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) 稳定性

相邻的两个元素交换,相同元素之间的相对位置并没有改变,故稳定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章