算法学习笔记(3)---冒泡排序

冒泡排序是针对少许待排数据的一种有效的排序算法,其思想是很是容易理解的:假设待排的数组长度为N算法

  1. 比较先后相邻的两个数,若是前面数据大于后面数据,则进行交换数组

  2. 将数据进行N-1次比较后,最大的数据就会浮到数组的最后code

  3. 将N=N-1,重复以上的步骤排序

代码实现为:博客

int bubbleSort_1(int *arr, int len)
{
	int i,j;
	for (i=0; i<len-1; i++)
		for (j=0; j<len-1-i; j++)
			if (arr[j] > arr[j+1])
				swap(arr[j], arr[j+1]);
	return 0;
}

后来想到这种算法貌似有改进的地方,并且在CSDN的博客上看到确实有改进的地方。好比:5 1 2 3 4 这个数组,在进行第一趟排序后,数组为1 2 3 4 5,第二趟排序不进行任何交换操做,这说明该排序已是升序,那么能够终止第3趟、第4趟排序。这里只需设置一个flag标签,判断第k次是否进行交换,若是没有则跳出循环,其代码以下:class

int bubbleSort_2(int *arr, int len)
{
	int i,j;
	bool flag = false;
	for (i=0; i<len-1; i++)
	{
		flag = false;
		for (j=0; j<len-1-i; j++)
			if (arr[j] > arr[j+1])
			{
				swap(arr[j], arr[j+1]);
				flag = true;
			}
		if (!flag)
			break;
	}
	return 0;
}
相关文章
相关标签/搜索