2016年11月27日 星期日

使用泡沫排序法與雙向泡沫排序法排一維陣列

//泡沫排序法與雙向泡沫排序法排一維陣列 public class ArraySort { int data[]={5,12,7,35,2}; public void BubbleSort(){ //泡沫排序法 for(int i=0;i<data.length-1;i++){ /*
data.length不減1的話,最後會產生data[5]造成錯誤
以data[i]當比較基準 step1以data[0] step2以data[1] step以data[3] step4以data[4] */ for(int j=i+1;j<data.length;j++){ /* data[j]:要被比較的數 step1:data[1][2][3][4] step2:data[2][3][4] step3[3][4] step4[4] */ int temp=0; if(data[i]<data[j]){ //由大排到小,由小排到大的話改data[i]>data[j] temp=data[i]; //暫存data[i]的值 data[i]=data[j]; //j換成i data[j]=temp; //j由於被換成i,因此值要再跟剛剛暫存的temp變數要 } }
} } public void BidirectionalBubbleSort(){ //雙向氣泡排序法 while(true){//由於不確定要執行幾輪,所以設無窮迴圈while(true) int count=0; //每執行完一輪歸零 for(int i=0 ;i<data.length-1;i++) { int temp=0; if(data[i]<data[i+1]){
/*
跟下一個比,因此[0]比[1]=>[1]比[2]=>
[2]比[3]=>[3][4]整個for迴圈執行完算一輪 */
temp=data[i]; data[i]=data[i+1]; data[i+1]=temp; count++; } } if(count==0){ //當count=0,代表已停止比較 break; //設迴圈停止條件 } } } public void printarray(){ //印出陣列內容
for(int i=0;i<data.length;i++){ System.out.println("data"+"["+i+"]="+data[i]); } } public static void main(String[] args) { ArraySort arr1=new ArraySort(); //arr1.BubbleSort(); arr1.BidirectionalBubbleSort(); arr1.printarray(); } }

沒有留言:

張貼留言