//泡沫排序法與雙向泡沫排序法排一維陣列
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();
}
}
沒有留言:
張貼留言