您的位置:首页 > 其它

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

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

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

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

将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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: