冒泡排序,顧名思義,就像魚缸裏魚吐泡泡一樣從下往上升,至於怎麼升是兩兩比較,然後把大的(或者小的)換上去
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();
}
}