冒泡排序,顾名思义,就像鱼缸里鱼吐泡泡一样从下往上升,至于怎么升是两两比较,然后把大的(或者小的)换上去
import java.util.Random;
public class Start {
/**
* @param args
*/
public static void Sort()
{
//生成一个数组
int []array=new int[10];
for(int i=0;i<array.length;i++)
{
array[i]=new Random().nextInt(10);
}
//开始排序
for(int i=0;i<array.length;i++)
{
//开始两两比较
/*如果大,则交换,循环完array[0]最大,所以条件j>i就是第一个就不用比较了*/
for(int j=array.length-1;j>i;j--)
{
if(array[j]>array[j-1])
{
int temp=array[j];
array[j]=array[j-1];
array[j-1]=temp;
}
}
}
for (int i : array)
{
System.out.println(i);
}
}
public static void main(String[] args)
{
Sort();
}
}
但是如果生成的数组是10,9,8,7,6,5,4,3,1,2 就最后两个不一样,还要循环10次,这就有点傻了,在小循环两两比较时如果发现array[j]一直比array[j-1]大不是正好就说明这个数组已经排好了吗,你可以打个断点输出数值细细体会
import java.util.Random;
public class Start {
/**
* @param args
*/
public static void Sort()
{
//设置一个变量,如果控制大循环是否还需要继续(不需要循环10次)
boolean flag=true;
int []array=new int[10];
for(int i=0;i<array.length;i++)
{
array[i]=new Random().nextInt(10);
}
for(int i=0;i<array.length&&flag;i++)
{
flag=false;
/*在上面flag设置成了false,下面的循环中如果if没有被执行说明数组已经是排好了的,不需要再继续外循环了,flag没有设置成true大循环失效*/
for(int j=array.length-1;j>i;j--)
{
if(array[j]>array[j-1])
{
int temp=array[j];
array[j]=array[j-1];
array[j-1]=temp;
flag=true;
}
}
}
for (int i : array)
{
System.out.println(i);
}
}
public static void main(String[] args)
{
Sort();
}
}