首先,存在一组无序的数列,元素个数为n,例如:{2,4,9,5,7,8,1},n=7,目标是将这些数按照小-->大的顺序排列;
思路:(1)、从左往右依次将相邻的两个数比较大小,若左边>右边,则两个数交换位置,共比较n-1次,第一次遍历比较后,数列中最大的数将会被置换到数列的最末尾;内层for循环实现;
过程:开始时:2,4,9,5,7,8,1;
第1次:比较2与4的大小,2>4,所以结果不变:2,4,9,5,7,8,1;
第2次:比较4与9的大小,4<9,所以结果不变:2,4,9,5,7,8,1;
第3次:比较9与5的大小,9>5,所以交换位置:2,4,5,9,7,8,1;
……
第6次:比较9与1的大小,9>1,所以交换位置 :2,4,5,7,8,1,9;
(2)、对(1)的结果{2,4,5,7,8,1,9}再次进行(1)过程,比较n-2次,依次类推,之后每次进行(1)过程,都比前一次少比较1次,直到达到目标;外层for循环实现;
代码:
package cn.xust.algorithm;
import java.util.Arrays;
/**
* 测试冒泡排序(bubble sort)
* @author yushanc
*
*/
public class BubbleSort
{
public static void main(String[] args)
{
int[] arr ={2,4,9,5,7,8,1};
//排序
for(int i =1; i<arr.length; i++)
{
boolean flag =true;
for(int j =0; j<arr.length-i; j++)
{
if(arr[j]>arr[j+1])
{
flag =false;
int temp =arr[j];
arr[j] =arr[j+1];
arr[j+1] =temp;
}
}
//如果没有发生交换,说明已经排好序了,直接跳出循环
if(flag)
{
break;
}
}
//打印
System.out.println(Arrays.toString(arr));
}
}
运行结果:[1, 2, 4, 5, 7, 8, 9]