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

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

  1. 比较前后相邻的两个数,如果前面数据大于后面数据,则进行交换

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

  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次是否进行交换,如果没有则跳出循环,其代码如下:

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;
}


你可能感兴趣的:(算法学习笔记(3)---冒泡排序)