简单排序之冒泡排序
冒泡排序算法运行起来非常慢,单在概念上它是排序算法中最简单的,因此冒泡排序算法在
刚开始研究排序技术时是一个非常好的算法。
使用冒泡排序算法对棒球队队员排序
如果人近视得像计算机程序一样,以至于只能看到站在他面前的两个相邻的棒球队员。在这种困难的情况下,如何为队员们排序呢?假设有N个队员,并且根据所站的位置从左到右分别给每一个队员编号,从0到N-1。
冒泡排序例程执行如下:从队列的最左边开始,比较0号位置和1号位置的队员。如果左边的队员(0号)高,就让两个队员交换。如果右边的队员高,就什么都不做。然后右移一个位置,比较1号位置和2号位置的队员。和刚才一样,如果左边的队员高,则两个队员交换位置,具体排序过程如图:
以下是要遵循的规则:
1.比较两个队员。
2.如果左边的队员高,则两队员交换位置。
3.向右移动一个位置,比较下面两个队员。
沿着这个队列照刚才那样比较下去,一直比较到队列的最右端。虽然还没有完全把所有队员都排好序,但是最高的队员确实已经被排到最右边了。这是可以确定的,因为在每次比较两个队员的时候,只要遇到最高的球员就会交换他(她)的位置,直到他(她)到达队列的最右边。这个算法被称为冒泡排序的原因:因为在算法执行的时候,最大的数据项总是“冒泡到”数组的顶端。下图是第一趟排序之后队员的排列情况。
4.那么当碰到第一个排定的队员后,就返回到队列的最左端重新开始下一趟排序。不断的执行这个过程,直到所有的队员都排定好。
以下是算法的具体代码实现:
public void bubbleSort(int[] arry){
int temp = 0;
for(int i = 0; i < arry.length; ++i){
//因为每排序一次,数组顶端就确定一个位置,即每冒泡一次
//下一次就只需对数组中的(arry.length - i - 1)个数排序
for(int j = 0; j < arry.length - i - 1; ++j){
//交换位置,将大的数向后排序
if(arry[j] > arry[j+1]){
temp = arry[j];
arry[j] = arry[j+1];
arry[j+1] = temp;
}
}
}
print(arry);//打印输出
}