您的位置:首页 > 其它

冒泡排序

2015-06-05 22:51 176 查看
What?

冒泡排序(Bubble Sort):排序方法的思想就像他的名称,像泡泡一样冒上来。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误,就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。每一轮大的数字都会先筛选出来,也就是像他的名称,大的元素会经过比较慢慢的浮出“水面”。

How?

如何使用冒泡排序?先从一张图来分析:



解释说明:



第一轮第二轮都是比较完之后的结果,他们是怎么对比的呢?看一下我们最初的数据,在得出第一轮比较的时候,他们的比较方法就是两个元素之间比较大小,我们可以看出不同颜色的长方形相嵌着,大的元素放在后边,最后最大的元素就会被选拔出来。这样依照此类的方法进行第二轮的对比,知道循环完了。

以上说的是冒泡排序的思想,同样我们也会在代码中有所体现。

Java代码:

<span style="font-size:18px;">/*
作者:雪
时间:2015年5月11日
功能:冒泡排序
思路:
冒泡排序就是进行两个两个的对比
第一个元素和 第二个元素对比,第二个元素和第三个元素进行对比。。。
也就是紧挨着的元素进行对比,这是内循环,外循环主要就是这样的两两排序一共需要进行多少次
原理:
冒泡排序的原理,每次一排序就会筛选出最大值,然后第一次肯定筛选出的是最大的值
第二次就减少一次元素的比较
第三次减少两个元素的比较
知道最后剩下的两个元素就可以不进行比较了。。
*/
public class BubbleSort
{
public static void Bubble(int arry[])
{
for(int x=0;x<arry.length;x++)
{
for(int y=0;y<arry.length-1-x;y++)//x是每一次排序元素减少的个数,-1是为了不要让下表越界
{
/*此方法被封装,这样不仅冒泡排序可以使用,选择排序也可以使用
if(arry[y]<arry[y+1])
{

int tmp=arry[y+1];
arry[y+1]=arry[y];
arry[y]=tmp;
}
*/
compare(arry,y,y+1);
}
}
}
//主函数调用功能
public static void main(String[] args)
{
int arr[]={4,7,2,1,8,9,34};
Print(arr);
Bubble(arr);
Print(arr);

}
public static void Print(int[] arry)
{
for(int x=0;x<arry.length;x++)
{
//如果x不是最后一个元素
if(x!=arry.length-1)
{
System.out.print(arry[x]+",");
}
else
{
System.out.print(arry[x]);
}
}
System.out.println("");
}
//不管是冒泡排序,还是选择排序都有一个共同的功能就是比较大小的功能
public static void compare(int arry[],int a,int b)
{
if(arry[a]>arry)
{
/*1.可以采用异或
arr[y]=arry[y]^arry[y+1];
arry[y+1]=arry[y]^arry[y+1];
arry[y]=arry[y]^arry[y+1];
*/
int temp=arry[a];
arry[a]=arry[b];
arry[b]=temp;
}
}
}</span>


Why?

相对比之前的选择排序,那么冒泡排序又有什么特点呢?

冒泡排序是一种稳定的算法,不管相同的元素是相邻还是不相邻的,他的排序方式就是根据相邻元素两两进行对比的,涉及到相同的元素,该怎么排序还是怎么排序。所以说不管是谁先出现的,他们的总是会有一个优先的位置。这样的排序算法很稳定。

[b]总结:


不管是冒泡排序,还是选择排序,只要理清思路,在纸上画一画,这样我们会很轻松的写出代码。如果眼高手低,我们大概只知道一些皮毛。同时今天的冒泡排序,还用到了运算符——异或(^),这样的一个小的知识,知识虽小,但是用起来还是挺生疏的,所以学过的东西,不仅要知道,还要尝试的去运用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: